Mon objectif est d'extraire certains nœuds de plusieurs fichiers xml avec plusieurs espaces de noms en utilisant XPath. Tout fonctionne bien tant que je connais les URI de l'espace de noms. Le nom de l'espace de noms lui-même reste constant, mais les schémas (XSD) sont parfois générés par le client, c'est-à-dire inconnus de moi. Ensuite, il me reste essentiellement trois choix:
utilisez un seul schéma pour l'espace de noms, en espérant que rien ne va pas (puis-je en être sûr?)
récupérez les nœuds enfants du document et recherchez le premier nœud avec un URI d'espace de noms, en espérant qu'il y soit et utilisez simplement l'URI, en espérant que c'est le bon. peut mal tourner pour plusieurs raisons
dites en quelque sorte à xpath: "regardez, je ne me soucie pas des espaces de noms, trouvez juste TOUS les nœuds avec ce nom, je peux même vous dire le nom de l'espace de noms, mais pas l'URI". Et c'est la question ici ...
Ce n'est pas une réitération de nombreuses questions "mon expression xpath ne fonctionne pas parce que je ne suis pas au courant de la connaissance de l'espace de noms" que l'on trouve ici ou ici . Je sais comment utiliser la reconnaissance de l'espace de noms. Mais pas comment s'en débarrasser.
la source
Réponses:
Vous pouvez utiliser la
local-name()
fonction XPath. Au lieu de sélectionner un nœud commevous pouvez sélectionner tous les nœuds et filtrer pour celui avec le nom local correct:
la source
local-name()
pour faire référence aux attributs, d'une manière ignorant les espaces de noms, voir: stackoverflow.com/q/21239181/274677Vous pouvez faire la même chose dans XPath2.0 dans une syntaxe moins verbeuse:
la source
Vous pouvez utiliser Namespace = false sur un XmlTextReader
avec :
la source
'The 'xmlns' attribute is bound to the reserved namespace
erreur.Ou vous pouvez utiliser name ():
Ou uniquement les attributs de recherche:
Si vous ouvrez le xml en tant qu'objet PowerShell, il ignore les espaces de noms:
la source
C'est mon exemple en Qt C ++. Qt prend en charge XPath 2.0:
Sortie programme:
"1 0 0 2 0 1 0 0 2 1 0 3 3 0 4 2 0 5\n"
Plane.dae
la source