2010-09-22 13 views
7

Estoy tratando de leer el archivo book.xml proporcionado como ejemplo en el sitio web de MSDN.Lectura de archivos XML en C# con XpathNavigator

<?xml version="1.0" encoding="utf-8" ?> 
<bookstore> 
    <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0"> 
     <title>The Autobiography of Benjamin Franklin</title> 
     <author> 
      <first-name>Benjamin</first-name> 
      <last-name>Franklin</last-name> 
     </author> 
     <price>8.99</price> 
    </book> 
    <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2"> 
     <title>The Confidence Man</title> 
     <author> 
      <first-name>Herman</first-name> 
      <last-name>Melville</last-name> 
     </author> 
     <price>11.99</price> 
    </book> 
    <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6"> 
     <title>The Gorgias</title> 
     <author> 
      <name>Plato</name> 
     </author> 
     <price>9.99</price> 
    </book> 
</bookstore> 

Tengo el siguiente código hasta ahora:

static void Main() 
     { 
      XmlDocument document = new XmlDocument(); 
      document.Load(@"c:\books.xml"); 

      XPathNavigator navigator = document.CreateNavigator(); 

      XPathNodeIterator nodes = navigator.Select("/bookstore/book"); 


      while (nodes.MoveNext()) 
      { 
       Console.WriteLine(nodes.Current.HasAttributes); 
      } 


     } 

Parece que este código es la lectura de todo, pero a partir de ahora si quiero mostrar, por ejemplo, sólo los títulos de todos los libros, etc. , ¿cómo puedo acceder a ellos?

Respuesta

15

Puede iterar sobre los títulos si cambia la expresión XPath para seleccionar todos los nodos de título:

XPathDocument document = new XPathDocument(@"c:\tmp\smpl5.xml"); 
XPathNavigator navigator = document.CreateNavigator(); 

XPathNodeIterator nodes = navigator.Select("/bookstore/book/title"); 

foreach (XPathNavigator item in nodes) 
{ 
    Console.WriteLine(item.Value); 
} 

Tenga en cuenta que no es necesario crear una XmlDocument si no se va a modificar el documento . Usar un XPathDocument suele ser más liviano.

+0

¡Gracias! Eso funciona brillantemente. – xbonez

+0

Ahora, en lugar de ver todos los títulos del archivo xml, ¿cuál sería la forma más sencilla de mostrar toda la información sobre cada nodo? Es decir, mostrar el título, el nombre del autor, el apellido del autor, etc. – xbonez

+1

+1 para recomendar xpathdocument – annakata

0

también puede usar este "// título" en lugar de "/ librería/libro"