Ein element kann nicht direkt ein attribute haben, es muss über einen complexType angefügt werden.
Das Attribute selbst ist jedoch immer als simpler Typ definiert:
- xs:string
- xs:decimal
- xs:integer
- xs:boolean
- xs:date
- xs:time
<xs:attribute name=”lang” type=”xs:string” use=”required”/>
Das Beispiel zeigt eine Definition, die das Attribut als erforderlich deklariert.
Tags:
Ein Element kann nur Text enthalten. Es kann keine weiteren Elemente oder Attribute beinhalten.
Wobei “Text” missverständlich sein kann. Denn der Inhalt kann einer von den xsd Typen (boolean, string, date, etc.) sein, oder ein benutzerdefinierter Typ, den man selbst erstellt.
<xs:element name=”xxx” type=”yyy”/>
Komplexes Element
Es gibt vier Möglichkeiten:
- leere elemente
<result state=”true” />
- solche die nur andere elemente beinhalten
<result>
<state>true</state>
</result>
- solche die nur text beinhalten
<result state=”true”>no error occurred</result>
- elemente, die andere elemente und text beinhalten
<result state=”true”>no <green>error</green> occurred</result>
Definition eines komplexen Elementes
<employee>
<firstname>John</firstname>
<lastname>Smith</lastname>
</employee>
XSD
<xs:element name=”employee”>
<xs:complexType>
<xs:sequence>
<xs:element name=”firstname” type=”xs:string”/>
<xs:element name=”lastname” type=”xs:string”/>
</xs:sequence>
</xs:complexType>
</xs:element>
Oder mehr genereller, damit beispielsweise ein anderes Element wie “Kunde” dieselbe Definition verwenden kann:
<xs:element name=”employee” type=”personinfo”/>
<xs:complexType name=”personinfo”>
<xs:sequence>
<xs:element name=”firstname” type=”xs:string”/>
<xs:element name=”lastname” type=”xs:string”/>
</xs:sequence>
</xs:complexType>
Ohne Angaben von minOccurs and maxOccurs muss das Element exakt einmal vorkommen. (entspricht also minOccurs=1 und maxOccurs=1).
ACHTUNG! Attribute Definitionen müssen immer am Ende (z.B. nach sequence) erfolgen!
Any whitespace you're putting in there is getting trimmed since the
stylesheet doesn't see its own whitespace-only text nodes as significant.
(The earlier text node ', ' isn't getting trimmed since it's not
whitespace-only.)
The solution is to say
<xsl:text> </xsl:text>
or if you like,
<xsl:value-of select=" "/>
should get you the same thing. Note this is a space, not a non-breaking
space, which would be another way to go -- just use (no <xsl:text>
necessary in that case since it's not "whitespace only" -- the non-breaking
space character isn't considerd "whitespace" for these purposes.)
Another Hints
You can use an <xsl:text> element to introduce a (real) space character:
<xsl:value-of select="../HEADER/FROM/STATE"/>
<xsl:text> </xsl:text>
<xsl:value-of select="../HEADER/FROM/ZIP1"/>
or
<xsl:value-of select="../HEADER/FROM/STATE"
/> <xsl:value-of select="../HEADER/FROM/ZIP1"/>
or you can insert a non-breaking space character ( in HTML) if that is
more appropriate:
<xsl:value-of select="../HEADER/FROM/STATE"
/> <xsl:value-of select="../HEADER/FROM/ZIP1"/>