Comment filtrer avec XPath sur tous les éléments sans attribut spécifique

StackOverflow https://stackoverflow.com/questions/812090

  •  03-07-2019
  •  | 
  •  

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.

Était-ce utile?

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')]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top