2010-09-22 15 views
7

Sto cercando di leggere il file book.xml fornito come esempio sul sito Web MSDN.Lettura del file XML in 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> 

Ho il seguente codice fino ad ora:

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); 
      } 


     } 

Sembra questo codice sta leggendo tutto, ma da qui in poi se voglio visualizzare, ad esempio, solo i titoli di tutti i book etc. come posso accedervi?

risposta

15

È possibile scorrere i titoli se si cambia l'espressione XPath per selezionare tutti i nodi titolo:

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); 
} 

Si noti che non è necessario creare un XmlDocument se non si ha intenzione di modificare il documento . L'utilizzo di un XPathDocument è solitamente più leggero.

+0

Grazie! Funziona brillantemente. – xbonez

+0

Ora invece di visualizzare tutti i titoli nel file xml, quale sarebbe il modo più semplice di visualizzare tutte le informazioni su ciascun nodo? Cioè, visualizza titolo, nome dell'autore, cognome dell'autore ecc. – xbonez

+1

+1 per raccomandare xpathdocument – annakata

0

puoi anche utilizzare questo "// titolo" invece di "/ bookstore/book"