2013-01-21 2 views

Répondre

19

Tout d'abord, soyez prudent avec votre terminologie ici. Voulez-vous dire "noeud" ou voulez-vous dire "élément". Un noeud peut être un élément, un commentaire, un texte de processing-instruction.

Quoi qu'il en soit, si vous ne voulez élément ici, pour vérifier au moins un élément enfant existe, vous pouvez simplement le faire (en supposant que vous êtes positionné sur le nœud élément dans ce cas.

<xsl:if test="*"> 

Votre commentaire suggère que « node1 » peut passer la condition if, afin de vérifier l'existence d'un élément spécifique, faire

<xsl:if test="node1"> 
+0

Merci pour votre réponse. J'ai eu une confusion parmi ces termes. Sera plus prudent la prochaine fois –

3

Dans le contexte du nœud que vous testez, cela devrait fonctionner pour vérifier si un noeud a enfant éléments:

<xsl:if test="*"> 
    Only node1 can pass the if condition 
</xsl:if> 

Si vous noeuds voulais dire (ce qui inclurait les nœuds de texte), alors ce travaillerais pour inclure les nœuds de texte:

<xsl:if test="node()"> 
    Only node1 can pass the if condition 
</xsl:if> 

Mais <node> serait également passer ce test (<node2> wouldn 't). Je suppose que vous ne parliez que dans le contexte des nœuds enfants de <node>, mais peut-être pas?

0

expressions qui correspondent à un nœud sont truthy, tandis que les expressions qui ne correspondent pas à quoi que ce soit sont falsy, donc:

<xsl:if test="node()"> 
    ... 
</xsl:if> 

Cependant, votre question et la condition implicite "Seul node1 peut passer la condition if" sont en contradiction avec l'exemple. Les deux node et node1 ont des nœuds enfants, donc les deux passeraient cette condition si.

Pour le limiter strictement à node1, vous devez vous assurer que le contexte du modèle est approprié ou vérifier que le noeud en question n'est pas documentElement.

0

Le libellé de la question ne sait pas, mais je pense que vous voulez juste pour traiter les nœuds enfants qui se sont a des enfants (c.-à-petits-enfants du noeud courant)

<xsl:template match="node"> 
do stuff for node 
    <xsl:apply-templates select="*[*]"/> 
</xsl:template> 

va simplement appliquer des modèles à node1 comme il l'a un nœud enfant, il n'appliquera pas de modèles à node2.

Questions connexes