140 votes

comment ignorer les espaces de noms avec XPath

Mon but est d'extraire certains nœuds à partir de plusieurs fichiers xml avec plusieurs espaces de noms à l'aide de XPath. Tout fonctionne bien tant que je sais de l'espace de noms Uri. L'espace de noms du nom lui-même reste constante, mais le schema (XSD) sont parfois client généré c'est à dire inconnu pour moi. Ensuite, je suis parti avec trois choix :

  1. utiliser un schéma pour l'espace de noms, en espérant que rien ne va mal (puis-je en être sûr?)

  2. les enfants sont les nœuds du document et regardez pour le premier noeud avec un URI d'espace de noms, en espérant que ses là et il suffit d'utiliser l'URI , en espérant sa le bon. peut aller mal pour plusieurs raisons

  3. en quelque sorte dire xpath : "regardez, je n'ai pas de soins sur les espaces de noms, il suffit de trouver TOUS les nœuds avec ce nom, je peux même vous dire le nom de l'espace de noms, pas seulement dans l'URI". Et c'est la question ici...

Ce n'est pas une réitération de nombreux "mon expression xpath ne marche pas parce que je ne suis pas au courant de la prise de conscience de l'espace de noms" des questions telles que trouvées ici ou ici. Je sais comment utiliser l'espace de noms de sensibilisation. Tout simplement pas comment se débarrasser de lui.

210voto

0xA3 Points 73439

Vous pouvez utiliser la fonction local-name() XPath. Au lieu de sélectionner un noeud comme

 /path/to/x:somenode
 

vous pouvez sélectionner tous les nœuds et filtrer pour celui portant le nom local correct:

 /path/to/*[local-name() = 'somenode']
 

Prograide.com

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.

Powered by:

X