leere Tags XSLT
Carola
- xml
0 Thomas J.S.0 Carola
Hallo,
ist es möglich, dass man leere Tags gar nicht erst ausgibt!! Habe ein Schema in XSLT und möchte nicht, dass die leeren Tags bei der Ausgabe angezeigt werden.
Lösungsvorschlag eines Kollegen war:
<xsl:output omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()">
<xsl:if test="count(descendant::text()[string-length(normalize-space(.))>0]|@*)">
xsl:copy
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:if>
</xsl:template>
<xsl:template match="@*">
xsl:copy/
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
wenn ich das einbinde, funktioniert das aber nicht.
Vielen Dank für eure Hilfe, bin sehr gespannt.
Carola
Hallo,
ist es möglich, dass man leere Tags gar nicht erst ausgibt!!
Ist das eine Frage? ;-)
Habe ein Schema in XSLT und möchte nicht, dass die leeren Tags bei der Ausgabe angezeigt werden.
Lösungsvorschlag eines Kollegen war:
<xsl:output omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()">
<xsl:if test="count(descendant::text()[string-length(normalize-space(.))>0]|@*)">
count() bringt hier so nichts, weil das Ergebnis immer zurtreffen wird. count() gibt die anzahl der Knoten um Knotenset zurück, d.h. auch wenn es keinen Knoten gibt, gibt es ein Ergebnis, denn auch 0 ist ein Ergebnis.
Mache es entweder mit "count( ... ) != 0" was ziemlich schlechter Stil ist, oder so:
<xsl:template match="@* | node()[current() != '']">
xsl:copy
<xsl:apply-templates select="@*" />
<xsl:apply-templates select="node()[current() != '']" />
</xsl:copy>
</xsl:template>
das <xsl:strip-space elements="*"/> sorgt bereits dafür, dass bei Elementen die nur Leerzeichen enthalten, diese entfernt werden.
Grüße
Thomas
Hallo Thomas,
Ups, ja das war meine Frage ;o)
Danke für Deine Antwort, werde mal versuchen ob ich es so hinbekomme.
Grüße
Carola