auf Node - Type testen
zipdrive
- xsl
Hallo, ich komme gerade nicht auf die Lösung dieses Problems:
Ich habe eine Sequence von 3 Nodes, die ich in einem for-each abhandeln möchte, z.B. so:
<para>textnode1<fat>textnode3</fat>textnode2</para>
<p><xsl:for-each select=".">
<xsl:if text="???"><xsl:value-of select="." /></xsl:if>
<xsl:if text="???"><b><xsl:value-of select="." /></b></xsl:if>
</xsl:for-each></p>
Leider weiß ich nicht, wie ich den Typ des Nodes prüfen soll. Im Ersten xsl:if soll er auf einen Textnode prüfen, im Zweiten auf das Element mit dem Namen fat.
Erlaubt ist XPath 2.0, XPath 2.0 Functions, XQuery 1.0 und XSLT 2.0.
MfG
Hallo zipdrive,
ich würde das ganze anders handhaben, mehr in der Art wie
<xsl:template match="para">
<p>
<xsl:apply-templates />
</p>
</xsl:template>
<xsl:template match="fat"><!-- oder para/fat oder para//fat -->
<strong>
<xsl:apply-templates />
</strong>
</xsl:template>
<!-- und eventuell noch ein -->
<xsl:template match="text()">
<xsl:value-of select="." />
</xsl:template>
sonst müsstest Du Dich um jede Verschachtelung wie <fat><italic>, <italic><fat>, <fat><small> etc. selber kümmern.
Gruß
Olaf Schneider
Dank dir, so hab ich mir das gerade auch gedacht, dass das so einfacher wäre. Trotzdem würde ich das gerne wissen, wie prüft man auf den Typ eines Knotens!
MfG
Hallo zipdrive,
Mit test="text()" testest Du auf Textknoten.
Mit test="node()" testest Du auf Text- und Elementknoten.
mit test="fat" testest Du auf den Elementknoten <fat />.
Gruß
Olaf Schneider