2009-04-06 10 views
1

Étant donné un morceau de XML comme celui ci-dessous. Comment écrire une requête XPATH pour obtenir la valeur de l'enfant 'leaf2' où la valeur 'key' a des valeurs particulières (disons 2)Comment: rechercher des noeuds enfant XML

Je travaille en C# .NET. Pour l'instant, je cherche simplement à obtenir la clé Xpath pour la clé en utilisant SelectNodes, en trouvant la bonne valeur puis en remontant jusqu'à leaf2.

<root> 
    <child> 
     <anotherChild> 
      <key>1</key> 
     </anotherChild> 
     <leaf1>X</leaf1> 
     <leaf2>Y</leaf2> 
     <leaf3></leaf3> 
    </child> 
    <child> 
     <anotherChild> 
      <key>2</key> 
     </anotherChild> 
     <leaf1>A</leaf1> 
     <leaf2>B</leaf2> 
     <leaf3></leaf3> 
    </child> 
</root> 

Répondre

8

Vous voulez:

/root/child[anotherChild/key = '2']/leaf2 

Ce dit: « obtenir des éléments nommés leaf2, dont le parent est child et dont les grands-parents est root, où child est en cours filtré par son enfant nommé anotherChild avec un enfant appelé key dont la valeur est 2. "

+0

Ne devrait-il pas être la clé = '2'? – Naveen

+0

Droit, à droite, a glissé mon esprit – Welbog

2

Ou, peut-être un peu plus flexible, car il ne suppose pas le grand-père est la racine

//child/anotherChild/key[text()="2"]/../../leaf2 

« trouver la clé avec le texte 2, parent anotherChild et grandparentchild, aller à des grands-parents (c.-à-enfant, et trouver leaf2 "

+0

cela peut très bien fonctionner aussi je ne l'ai pas encore essayé – TygerKrash

+0

Devrait faire, je l'ai testé dans SketchPath contre votre XML (donc pas réellement en C#) –

+0

Alors, qui a marqué ça, et ça vous dérangerait de dire pourquoi? –

Questions connexes