Comment construire un xpath pour sélectionner les éléments qui ne contiennent pas la chaîne
Comment puis-je utiliser quelque chose de similaire à l'exemple ci-dessous, mais avec l'effet inverse, j'.e les éléments qui ne contiennent pas de (default)
dans le texte.
<test>
<item>Some text (default)</item>
<item>Some more text</item>
<item>Even more text</item>
</test>
Compte tenu de cette
//test/item[contains(text(), '(default)')]
renvoie le premier élément. Est-il pas l'opérateur que je peux utiliser avec contient?
OriginalL'auteur Danny | 2010-04-20
Vous devez vous connecter pour publier un commentaire.
Oui, il y a:
Astuce:
not()
est une fonction XPath à la place d'un opérateur.Une alternative, peut-être un meilleur moyen d'exprimer ce qui est:
Il y a une subtile mais importante différence entre les deux expressions (appelons-les A et B, respectivement).
Cas Simple: Si tous les
<item>
un seul nœud de texte de l'enfant, à la fois A et B ont le même comportement.Cas complexe: Si
<item>
peut avoir plusieurs nœud de texte des enfants, l'expression d'Une seule correspond quand'(default)'
se produit dans le premier d'entre eux.C'est parce que
text()
correspond à tous nœud de texte des enfants et produit un node-set. Jusqu'à présent, aucune surprise. Maintenant,contains()
accepte un node-set en tant que premier argument, mais il a besoin de les convertir en string pour faire son travail. Et la conversion de node-set chaîne ne produit de la chaîne de valeur du premier noeud dans l'ensemble, tous les autres nœuds sont pas pris en compte (essayezstring(//item)
pour voir ce que je veux dire). Dans le cas simple de ce exactement ce qui se passe ainsi, mais le résultat n'est pas aussi surprenant.Expression B traite avec cette explicitement à la vérification de chaque nœud de texte individuellement au lieu de seulement la vérification de la chaîne de valeur de l'ensemble du
<item>
élément. Par conséquent, il est le plus robuste des deux.OriginalL'auteur Tomalak