2010-09-22 9 views
7

Ich versuche, die Datei book.xml zu lesen, die als Beispiel auf der MSDN-Website bereitgestellt wird.XML-Datei in C# mit XpathNavigator lesen

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

Ich habe den folgenden Code, bis jetzt:

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


     } 

Es scheint, dieser Code ist alles zu lesen, aber von hier an, wenn ich angezeigt werden soll, sagen wir, nur die Titel aller Buch usw. , wie kann ich auf sie zugreifen?

Antwort

15

Sie können über den Titel wiederholen, wenn Sie den Ausdruck XPath ändern, um alle Titel Knoten wählen:

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

Beachten Sie, dass Sie nicht brauchen eine XmlDocument zu erstellen, wenn Sie das Dokument nicht ändern planen . Mit einem XPathDocument ist in der Regel leichter.

+0

Vielen Dank! Das funktioniert hervorragend. – xbonez

+0

Jetzt, anstatt alle Titel in der XML-Datei anzuzeigen, was wäre die einfachste Möglichkeit, alle Informationen zu jedem Knoten anzuzeigen? Das heißt, Titel anzeigen, Vornamen des Autors, Nachname des Autors usw. – xbonez

+1

+1 für die Empfehlung von xpathdocument – annakata

0

Sie können diesen "// title" auch anstelle von "/ bookstore/book" verwenden