À l'aide d'une requête xpath, comment savoir s'il existe un nœud (balise)?
Par exemple, si je devais m'assurer qu'une page de site Web a la structure de base correcte comme / html / body et / html / head / title
xslt
xpath
expression
EddyR
la source
la source
Réponses:
donc par exemple
la source
html/body and not(html/body/node())
(c'est-à-dire, testez simplement si elle existe et qu'elle ne contient aucun nœud enfant ou nœud texte).Essayez l'expression suivante:
boolean(path-to-node)
la source
Patrick a raison, à la fois dans l'utilisation de
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 de xsl équivalent à if-then-else, donc si vous cherchez quelque chose de plus comme un if-then-else, il vaut mieux utiliserxsl:choose
et etxsl:otherwise
. Ainsi, l'exemple de syntaxe de Patrick fonctionnera, mais ceci est une alternative:la source
if-then-else
, qu'en est-il égalementif-else if-else
? Dans la réponse de davenpcj, puis-je placertest="somexpath"
dans le 2e quand le faireif-else if-else
?Il pourrait être préférable d'utiliser un choix, de ne pas avoir à taper (ou peut-être de mal saisir) 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 de manière inattendue plus d'un nœud qui correspond à votre expression.la source
count(/html/body) = 0
génie! : DI l'utilise comme/html[count(/body)=0]/someNode
pour sélectionnersomeNode
quand/body
(ou autre) est manquant/html[count(/body)=0]
ne sélectionnera jamais rien, il ne peut pas y avoir deux nœuds racine en XML. Peut-être que vous vouliez dire/html[count(body)=0]
, ce qui serait le même que/html[not(body)]
, ou/html[not(exists(body))]
.Je travaille en Ruby et en utilisant Nokogiri, je récupère l'élément et regarde si le résultat est nul.
la source
Une variation lors de l'utilisation de xpath en Java en utilisant count ():
la source