[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
[Recent Entries]
[Reply To This Message]
Re: [xml] repeating elements
Subject: Re: [xml] repeating elements
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Thu, 24 May 2007 21:11:48 +0100
|
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!
Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!
Download The World's Best XML IDE!
Accelerate XML development with our award-winning XML IDE - Download a free trial today!
Subscribe in XML format
RSS 2.0 |
|
Atom 0.3 |
|
|