Subject: Re: [xsl] [xml] repeating elements From: "Ignacio Garcia" <igcxslt@xxxxxxxxx> Date: Tue, 29 May 2007 09:18:16 -0400 |
I can have multiple <i> elements, but the editor won't allow me to add <i> MIXED TEXT <i>. If I do it by hand the result is validated with no problems.
On 5/24/07, Ignacio Garcia <igcxslt@xxxxxxxxx> wrote: > Hello, > > I have the following problem... > > I have created a schema that with a complex type that contains a few > html like tags: > > <xsd:complexType name="notesText" mixed="true"> > <xsd:sequence minOccurs="0" maxOccurs="unbounded"> > <xsd:element name="b" type="xsd:string" minOccurs="0"/> > <xsd:element name="i" type="xsd:string" minOccurs="0"/> > <xsd:element name="p" type="notesText" minOccurs="0"/> > <xsd:element name="br" minOccurs="0"> > <xsd:simpleType> > <xsd:restriction base="xsd:string"> > <xsd:length value="0"/> > </xsd:restriction> > </xsd:simpleType> > </xsd:element> > <xsd:element name="a" minOccurs="0"> > <xsd:complexType mixed="true"> > <xsd:attribute name="href" type="xsd:string" use="required"/> > </xsd:complexType> > </xsd:element> > <xsd:element name="ul" minOccurs="0"> > <xsd:complexType> > <xsd:sequence maxOccurs="unbounded"> > <xsd:element name="li" type="notesText" minOccurs="0"/> > </xsd:sequence> > </xsd:complexType> > </xsd:element> > </xsd:sequence> > </xsd:complexType> > > As you can see, the type is simple and does exactly what I want... > If I put this inside an element and create an stylesheet using > <xsl:copy-of> I get the desired result of working html code... > > HOWEVER, using this definition none of the html editors I have used > lets me add the same html-like-tag two times in a row with text in > between them... > > Let me explain: > > If my element contains: > ---------------- > This is some <b>text</b> with <i>html</i> tags on it. > ---------------- > > Everything works perfect...BUT if after that I want to add <i>another > italics</i>, the editor won't let me... If I use a raw text editor, > then I can add it, and the instance is valid, but any xml editor that > helps with tag addition will not let me add the second <i> after I > have used one. > > However, if I have some other html-like-tag between the two <i>, then > there is no problem... > > Does anyone know why??? > I have tried adding <sequence minOccurrs=0" maxOccurrs="unbounded"> > surrounding all the html-like elements, but that does not work > either...
This is an XML Schema question, not XSLT, so its better asked on XML Schema Dev (although Schema Aware XSLT is on-topic so I guess the lines are blurred a little).
You've defined <i> as optional, so you're only only allowed 0 or 1 occurrence, hence when you add second the XML becomes invalid. If you want to allow more that one then specify maxOccurs on the definition to it optional-repeatable.
Even then, all that will do is allow you to have multiple <i>'s in a sequence. If you want to allow any element in any order then I use a group:
<xs:group name="html-elements"> <xs:sequence> <xs:element name="b" type="xs:string" minOccurs="0"/> <xs:element name="i" type="xs:string" minOccurs="0"/> <xs:element name="p" type="html-elements" minOccurs="0"/> ..... </ </
and then:
<xs:complexType name="notesText" mixed="true"> <xs:group ref="html-elements" minOccurs="0" maxOccurs="unbounded"/> </
This should allow any mix of "html-elements" and text.
(this is just one way I've done it - there may well be better ways)
cheers andrew
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] [xml] repeating elements, Andrew Welch | Thread | RE: [xsl] [xml] repeating elements, Michael Kay |
RE: [xsl] transform xml using xsl i, Michael Kay | Date | Re: [xsl] XSLT and XML in the same , Andrew Welch |
Month |