XSlt - Standalone-Elemente
PeterK
- xml
Hallo.
Kann mir jemand sagen wie ich iun XSLT per xsl:element Slandalone-Elemente erzeugen kann? Wenn nämlich zwichen xsl:element und </xsl:element> nur Attribute stehen (keine Kindknoten), dann wird (zumindest bei der PHP-XSLT-Libary) ein Öffnendes Element ohne zugehöriges, schließendes Element ausgegeben. So wird z.B.
<xsl:element name="meta">
<xsl:attribute name="name">
xsl:textauthor</xsl:text>
</xsl:attribute>
<xsl:attribute name="content">
<xsl:value-of select="/xdoc/head/author" />
</xsl:attribute>
</xsl:element>
zu
<meta name="author" content="Peter Körner">
Ist das ein Bug oder ein Feature?? Und wie kann ich das Korrigieren??
Peter
Hallo,
Kann mir jemand sagen wie ich iun XSLT per xsl:element Slandalone-Elemente erzeugen kann?
(es heisst Leerelemente)
Wenn du <xsl:output method="xml" ... /> verwendest.
Wenn nämlich zwichen xsl:element und </xsl:element> nur Attribute stehen (keine Kindknoten), dann wird (zumindest bei der PHP-XSLT-Libary) ein Öffnendes Element ohne zugehöriges, schließendes Element ausgegeben.
Im normalfall, reagiert der XSLT-Prozessor auf xsl:output, dann wenn dies fehlt, auf das Wurzelelement des Ergebnisdokuments. Falls dieses "html" ist, wird ein HTML-Dokument erzeugt mit den Regel für HTML-Dokumente, sonst wird XML ausgegeben.
Ist das ein Bug oder ein Feature??
Weiss ich nicht, müsstest du austesten.
Und wie kann ich das Korrigieren??
Mit dem Einsatzt eines vollständigen XSLT-Prozessors und/oder mit xsl:output http://selfhtml.teamone.de/xml/darstellung/xsltelemente.htm#output
Grüße
Thomas
Hallo,
So wird z.B.
<xsl:element name="meta">
<xsl:attribute name="name">
xsl:textauthor</xsl:text>
</xsl:attribute>
<xsl:attribute name="content">
<xsl:value-of select="/xdoc/head/author" />
</xsl:attribute>
</xsl:element>zu
<meta name="author" content="Peter Körner">
... was bei der Ausgabe-Option html auch voellig korrekt ist, weil meta ein leeres Element ist.
Ansonsten kannst Du das auch einfacher haben:
<meta name="author" content="{/xdoc/head/author}" />
MfG, Thomas
Ich wollte halt möglichst einen XHTML-Konformen Output haben, also echtes XML, und außerdem fand ich das mit xsl:element einfach sauberer als die Ausgabe mit Literal-Elementen.
Naja, ok.
Thx, Peter
Hallo,
Ich wollte halt möglichst einen XHTML-Konformen Output haben, also echtes XML,
Das ist ja mit <meta ... /> auch gegeben.
und außerdem fand ich das mit xsl:element einfach sauberer als die Ausgabe mit Literal-Elementen.
Das ist keine Frage von sauber/unsauber, sondern von mehr/weniger aufwaendig.
xsl:element waere z. B. bei der Erzeugung eines XSL-Dokuments mittels XSLT angezeigt, wenn also xsl:elementname neben (X)HTML-Elementen heraus kommen soll.
Gerade bei vielen Attributen bevorzuge ich etwas wie (hier SVG):
<circle cx="{...}" cy="{...}" r="{...}" fill="{...}" />
gegenueber:
<xsl:element name="circle">
<xsl:attribute name="cx">
<xsl:value-of select="..." />
xsl:attribute
<xsl:attribute name="cy">
<xsl:value-of select="..." />
xsl:attribute
<xsl:attribute name="r">
<xsl:value-of select="..." />
xsl:attribute
<xsl:attribute name="fill">
<xsl:value-of select="..." />
xsl:attribute
</xsl:element>
MfG, Thomas
Hallo,
sorry, Cut'n'Paste-Fehler bei </xsl:attribute>:
gegenueber:
<xsl:element name="circle">
<xsl:attribute name="cx">
<xsl:value-of select="..." />
</xsl:attribute>
<xsl:attribute name="cy">
<xsl:value-of select="..." />
</xsl:attribute>
<xsl:attribute name="r">
<xsl:value-of select="..." />
</xsl:attribute>
<xsl:attribute name="fill">
<xsl:value-of select="..." />
</xsl:attribute>
</xsl:element>
MfG, Thomas