Subject: Re: [xsl] [xml] repeating elements From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx> Date: Thu, 24 May 2007 21:11:48 +0100 |
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"/> ..... </ </
<xs:complexType name="notesText" mixed="true"> <xs:group ref="html-elements" minOccurs="0" maxOccurs="unbounded"/> </
cheers andrew
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] [xml] repeating elements, Ignacio Garcia | Thread | Re: [xsl] [xml] repeating elements, Ignacio Garcia |
RE: [xsl] [xml] repeating elements, cknell | Date | Re: [xsl] XSLT 2.0 multi-level grou, Abel Braaksma |
Month |