2008-08-27 18 views
16

¿Cómo puedo usar XPath para seleccionar un nodo XML en función de su contenido?¿Cómo selecciono un nodo XML en función de su contenido?

Si, p. tienen el siguiente código XML y quiero seleccionar el <autor> -node que contiene Ritchie para obtener el nombre completo del autor:

<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> 

Respuesta

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

o

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

Para principiantes XPath como yo, podría ser útil tener en cuenta que el '.' es un alias más corto para' text() ', así que sí, esta respuesta hace lo correcto. – Oliver

+1

¿dónde podría leer una referencia completa y amigable de estas funciones? – juanpastas

+0

@Oliver - Esta mención de 'text()' me confundió mucho. Está mal. [El '.' es simplemente el elemento actual.] (Http://www.tizag.com/xmlTutorial/xpathpredicate.php) –

4

El XPath para esto es:

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

En C# el código siguiente volvería "Ritchie, Dennis M.":

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

+1. Las explicaciones detalladas serán útiles para los principiantes. – Nithesh

4
//author[contains(text(), 'Ritchie')] 
Cuestiones relacionadas