2008-08-27 12 views
16

Comment utiliser XPath pour sélectionner un nœud XML en fonction de son contenu?Comment sélectionner un nœud XML en fonction de son contenu?

Si par ex. ont le code XML suivant et je veux sélectionner l'auteur > -node < qui contient Ritchie pour obtenir le nom complet de l'auteur:

<books> 
    <book isbn='0131103628'> 
     <title>The C Programming Language</title> 
     <authors> 
      <author>Ritchie, Dennis M.</author> 
      <author>Kernighan, Brian W.</author> 
     </authors> 
    </book> 
    <book isbn='1590593898'> 
     <title>Joel on Software</title> 
     <authors> 
      <author>Spolsky, Joel</author> 
     </authors> 
    </book> 
</books> 

Répondre

23
/books/book/authors/author[contains(., 'Ritchie')] 

ou

//author[contains(., 'Ritchie')] 
+5

Pour les débutants XPath comme moi, il peut être utile de noter que le '.' est un alias plus court pour' text() '- donc oui, cette réponse fait la bonne chose. – Oliver

+1

où pourrais-je lire une référence complète et amicale de ces fonctions? – juanpastas

+0

@Oliver - Cette mention de 'text()' m'a fait beaucoup de confusion. Il est faux. [Le '.' est simplement l'élément courant.] (Http://www.tizag.com/xmlTutorial/xpathpredicate.php) –

4

XPath pour cela est:

/books/book/authors/author[contains(., 'Ritchie')] 

En C# le code suivant renverrait "Ritchie, Dennis M.":

xmlDoc.SelectSingleNode("/books/book/authors/author[contains(., 'Ritchie')]").InnerText; 
+0

+1. Des explications détaillées seront utiles pour les débutants. – Nithesh

4
//author[contains(text(), 'Ritchie')] 
Questions connexes