Vérifiez le type de nœud dans XSL modèle
Est-il possible de vérifier le type d'un nœud j'ai mis en correspondance avec un modèle à l'intérieur du même modèle? Dans le cas où il est, comment puis-je le faire? Pour exemple, j'aimerais faire quelque chose comme ceci:
<xsl:template match="@*|node()">
<xsl:choose>
<xsl:when test="current() is an attribute">
<!-- ... -->
</xsl:when>
<xsl:when test="current() is an element">
<!-- ... -->
</xsl:when>
<xsl:otherwise>
<!-- ... -->
</xsl:otherwise>
</xsl:choose>
</xsl:template>
- Tim a donné une belle réponse, mais je me demande pourquoi vous avez besoin pour ce faire à l'intérieur du modèle et pourquoi vous ne vous contentez pas d'écrire plus de match les modèles avec des modèles distincts pour les différents types de nœuds.
- Je suis intéressé à des fins éducatives. Je fais construire une transformation XSL pour mettre en évidence les nœuds qui correspondent à des expressions XPath dans un document XML. Dans une application réelle, je ne voudrais pas le faire.
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à cette réponse ici, car cela devrait vous donner les informations dont vous avez besoin:
Différence entre: child::node() et child::*
Cela donne à la suite de xsl:choisissez pour tester tous les nœuds, y compris le nœud du document.
Je vous recommande fortement d'utiliser le les expressions sur les types de séquence introduit dans XPath 2.0. Par exemple:
Une manière plus précise afin de déterminer si le nœud
$node
est un nœud racine:L'expression dans Itmc la réponse de tests du type du nœud actuel:
mais n'est pas applicable dans le cas lorsque nous voulons déterminer le type d'un nœud dans une variable, qui peut appartenir à un autre document, pas pour le document en cours.
Aussi, un test pour un nœud d'espace de noms: