2009-09-17 9 views
0

J'ai écrit un morceau d'analyse XML qui fonctionne correctement à condition d'utiliser un chemin absolu.XML interrogeant un nœud particulier à partir de C#

Je dois maintenant prendre un XMLNode comme argument et lancer un xpath par rapport à ceci.

Est-ce que quelqu'un sait comment faire cela?

J'ai essayé d'utiliser des requêtes XPath relatives sans succès !!

Devrait-il être si difficile?

+1

Il est difficile d'aider avec une telle question générique; pourriez-vous poster un exemple de fichier xml et xpath votre essayant de travailler? –

Répondre

2

Il serait utile de voir des exemples d'expressions XPath qui ne fonctionnent pas comme vous le pensez. Voici quelques causes possibles (erreurs que je fais fréquemment).

Supposons un document XML tel que:

<A> 
    <B> 
    <C d='e'/> 
    </B> 
    <C/> 
    <D xmlns="http://foo"/> 
</A> 
  • oubliant de retirer la barre de niveau supérieur ('/') représentant le document:

    document.XPathSelectElements("/A") // sélectionne un seul Noeud

    document.XPathSelectElements("//B") // sélectionne un seul noeud B

    document.XPathSelectElements("//C") // sélectionne deux noeuds C

mais

aNode.XPathSelectElements("/B") // selects nothing (this looks for a rootNode with name B) 
aNode.XPathSelectElements("B") // selects a B node 

bNode.XPathSelectElements("//C") // selects TWO C nodes - all descendants of the root node 
bNode.select(".//C") // selects one C node - all descendants of B 
  • oublier les espaces de noms.

    aNode.XPathSelectElements("D") // sélectionne rien (D est dans un espace de noms différent de A) aNode.XPathSelectElements("[local-name()='D' and namespace-uri()='http://foo']") // un node D

(Ceci est souvent un problème lorsque le nœud racine comporte un espace de noms prefixless - facile à miss)

Questions connexes