À l'aide d'une requête XPath, comment trouver si un nœud (balise) existe vraiment ?
Par exemple, si j'avais besoin de m'assurer qu'une page de site Web a la structure de base correcte comme /html/body
y /html/head/title
.
À l'aide d'une requête XPath, comment trouver si un nœud (balise) existe vraiment ?
Par exemple, si j'avais besoin de m'assurer qu'une page de site Web a la structure de base correcte comme /html/body
y /html/head/title
.
Surpris d'une note aussi élevée étant donné que la question ne précise pas du tout l'utilisation de XSLT.
Cela a fonctionné à merveille lors de l'élaboration de conditions de règles et d'actions de règles dans InfoPath 2010.
Patrick a raison, tant dans l'utilisation de la xsl:if
et dans la syntaxe pour vérifier l'existence d'un nœud. Cependant, comme l'indique la réponse de Patrick, il n'y a pas d'équivalent xsl à if-then-else, donc si vous cherchez quelque chose qui ressemble plus à un if-then-else, il est normalement préférable d'utiliser xsl:choose
y xsl:otherwise
. Ainsi, la syntaxe de l'exemple de Patrick fonctionnera, mais voici une alternative :
<xsl:choose>
<xsl:when test="/html/body">body node exists</xsl:when>
<xsl:otherwise>body node missing</xsl:otherwise>
</xsl:choose>
+1 pour avoir noté if-then-else
et que dire aussi de if-else if-else
? Dans la réponse de davenpcj puis-je placer test="somexpath"
dans la deuxième partie pour faire if-else if-else
?
@Abhishek Oui, vous pouvez mettre plus de xsl:when avec d'autres conditions et avoir une déclaration multi-branches. Pensez-y plus comme un SELECT que comme un if-then-else, avec xsl:otherwise comme défaut :.
Il est peut-être préférable d'utiliser un choix, ce qui évite d'avoir à taper (ou éventuellement à faire des erreurs) vos expressions plus d'une fois, et vous permet de suivre des comportements différents supplémentaires.
J'utilise très souvent count(/html/body) = 0
car le nombre spécifique de nœuds est plus intéressant que l'ensemble. Par exemple... quand il y a inopinément plus d'un nœud qui correspond à votre expression.
<xsl:choose>
<xsl:when test="/html/body">
<!-- Found the node(s) -->
</xsl:when>
<!-- more xsl:when here, if needed -->
<xsl:otherwise>
<!-- No node exists -->
</xsl:otherwise>
</xsl:choose>
Comme indiqué dans le code ci-dessus, d'autres clauses xsl:when peuvent être ajoutées pour modifier le comportement et traiter plusieurs conditions de différentes manières.
count(/html/body) = 0
Génie ! :D Je l'utilise comme /html[count(/body)=0]/someNode
pour avoir sélectionné someNode
quand /body
(ou autre) est manquant
@clickstefan, /html[count(/body)=0]
ne sélectionnera jamais rien, il ne peut pas y avoir deux nœuds racine dans le XML. Vous vouliez peut-être dire /html[count(body)=0]
ce qui revient à dire que /html[not(body)]
ou /html[not(exists(body))]
.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Peut-être est-il préférable d'utiliser le schéma XML avec indication des éléments obligatoires ? Ainsi, il serait possible de vérifier si un document l'utilise ou non.