108 votes

L'espace de noms XML casse mon xpath !

J'ai le XML suivant :

 <List xmlns="http://schemas.microsoft.com/sharepoint/soap/">
 <Fields>
   <Field>
   </Field>
 </Fields>
</List>

Il s'agit d'une version allégée de XML renvoyée par un service Web SharePoint. J'ai aussi le xPath suivant :

 /List/Fields/Field

Lorsque je supprime le xmlns de mon XML, le xPath fonctionne correctement. Quand il est là, mon xPath ne trouve rien. Y a-t-il quelque chose que je devrais faire différemment avec mon xPath ? La modification du XML n'est pas une option.

126voto

Dimitre Novatchev Points 147842

J'ai aussi le xPath suivant :

 /List/Fields/Field 

Quand je supprime les xmlns de mon XML le xPath fonctionne bien. Quand c'est dans là mon xPath ne trouve rien

Si vous ne pouvez pas enregistrer une liaison d'espace de noms et ne pouvez pas l'utiliser (en supposant que le préfixe enregistré est "x") :

 /x:List/x:Fields/x:Field

alors il y a un autre moyen :

 /*[name()='List']/*[name()='Fields']/*[name()='Field']

19voto

Anomie Points 43759

Vous devrez probablement enregistrer cet espace de noms uri avec votre bibliothèque xpath. Selon la bibliothèque, vous pourrez peut-être utiliser le préfixe "par défaut" ou vous devrez peut-être lui donner un préfixe nommé et l'utiliser dans vos requêtes xpath.

Par exemple, en php (puisque vous n'avez pas spécifié de langue) en utilisant DOMXPath, vous pouvez faire quelque chose comme ceci :

 $xpath = new DOMXPath($document);
$xpath->registerNamespace('x', 'http://schemas.microsoft.com/sharepoint/soap/');
$xpath->query('/x:List/x:Fields/x:Field');

-3voto

David Gausmann Points 747

Si vous pouvez ignorer l'élément document, le XPath suivant peut également vous aider :

 //Fields/Field

Cela fonctionne tant que vous n'avez pas de « Champs » sous un autre nœud et tant que les sous-nœuds n'ont pas d'espace de noms.

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