Comment filtrer avec XPath sur tous les éléments sans attribut spécifique
Question
Mon XPath est un peu rouillé ... Disons que j'ai ce simple fichier XML:
<?xml version="1.0" encoding="utf-8" ?>
<States xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<States>
<StateProvince name="ALABAMA" abbrev="AL" />
....
<StateProvince name="AMERICAN SAMOA" abbrev="AS" territory="true" />
</States>
</States>
Je voudrais lancer une simple requête XPath pour analyser tous les vrais états (donc, n'extrayez pas les états où Territory = true). J'ai essayé \ StateProvince [@territory! = 'True'] mais j'ai zéro. D'autres variations semblent échouer. Cela semble être simple, mais je ne trouve pas ce que je veux.
Toute aide appréciée.
La solution
Une expression XPath qui sélectionne les éléments souhaités :
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; / * / States / StateProvince [not (@ territorial = 'true')]
Notez que il faut éviter l’abréviation //
, dans la mesure du possible, car elle entraîne la totalité du document (sous-arbre noeud de contexte) à analyser .
L'expression XPath ci-dessus évite l'utilisation de l'abréviation //
en tenant compte de la structure de le document XML fourni à l'origine.
Uniquement si la structure du document XML est complètement inconnue (et que l'expression XPath est destinée à être utilisée dans de nombreux documents XML ayant une structure inconnue), vous devez utiliser le //
abréviation à prendre en compte .
Autres conseils
Vous êtes très proche:
//StateProvince[not(@territory) or @territory != 'true']
Vous devriez obtenir le résultat souhaité.
Cela devrait fonctionner:
//StateProvince[not(@territory='true')]