Il existe quelques techniques que vous pouvez essayer; que vous utilisez dépendra exactement quelles informations vous avez besoin de sortir de ce document, la rigueur avec laquelle vous voulez être, et de façon conforme à la XPath application que vous utilisez.
Une façon d'obtenir de l'URI d'espace de noms associé avec un préfixe particulier est à l'aide de l' namespace::
de l'axe. Cela vous donnera un nœud d'espace de noms dont le nom est le préfixe et dont la valeur est l'URI d'espace de noms. Par exemple, vous pourriez obtenir de l'URI d'espace de noms par défaut sur l'élément de document en utilisant le chemin d'accès:
/*/namespace::*[name()='']
Vous pourriez être en mesure de l'utiliser pour définir l'espace de noms d'associations pour votre XPathNavigator. Soyez averti, cependant, que l' namespace::
axe est l'un de ces coins de XPath 1.0 qui n'est pas toujours mis en œuvre.
Une deuxième façon d'obtenir des URI d'espace de noms est d'utiliser l' namespace-uri()
de la fonction sur l'élément de document (que vous avez dit sera toujours dans l'espace de nom). L'expression:
namespace-uri(/*)
vous donnera l'espace de noms.
Une alternative serait d'oublier d'associer un préfixe de l'espace de nom, et faites votre chemin d'accès de l'espace de noms gratuit. Vous pouvez le faire en utilisant l' local-name()
fonction lorsque vous avez besoin de se référer à un élément dont l'espace de noms que vous ne connaissez pas. Par exemple:
//*[local-name() = 'Element']
Vous pouvez aller plus loin et de tester l'URI d'espace de noms de l'élément à l'encontre l'un de l'élément de document, si vous le voulez bien:
//*[local-name() = 'Element' and namespace-uri() = namespace-uri(/*)]
Une dernière option, étant donné que l'espace de noms semble ne signifient rien pour vous, serait de exécuter votre XML au travers d'un filtre qui supprime les espaces de noms. Ensuite, vous n'aurez pas à vous soucier de votre XPath à tous. La meilleure façon de le faire serait tout simplement de supprimer l' xmlns
d'attribut avec une expression régulière, mais vous pouvez faire quelque chose de plus complexe si vous avez besoin de faire d'autres à ranger dans le même temps.