zipdrive: auf Node - Type testen

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

  1. 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

    1. 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

      1. 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