2016-12-12 4 views
1

Ich habe ein XmlDocument-Objekt in C#, die eine Struktur wie folgt hat:Wie wähle ich einen einzelnen Knoten aus einer XML-Knotenliste?

<?xml version="1.0"?> 
<catalog> 
    <book id="bk101"> 
     <author>Gambardella, Matthew</author> 
     <title>XML Developer's Guide</title> 
     <genre>Computer</genre> 
     <price>44.95</price> 
     <publish_date>2000-10-01</publish_date> 
     <description>An in-depth look at creating applications 
     with XML.</description> 
    </book> 
    <book id="bk102"> 
     <author>Ralls, Kim</author> 
     <title>Midnight Rain</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-12-16</publish_date> 
     <description>A former architect battles corporate zombies, 
     an evil sorceress, and her own childhood to become queen 
     of the world.</description> 
    </book> 
</catalog> 

mir ein Buch NodeList Erstellen und Schleife durch Array zu einem Autor Zeichenfolge zuweisen. Wenn ich versuche

XmlNodeList xnl = xmlDocument.SelectNodes("//catalog/book"); 
for (int i = 0; i < xnl.Count; i++) 
{ 
    authors[i] = xnl[i].SelectSingleNode("//author").InnerText; 
} 

Ich bekomme eine Null-Referenz Ausnahme. Warum sollte das Ergebnis von SelectSingleNode null sein?

+0

ich denke, die doppelte Schrägstrich auf Autor nicht notwendig ist, nicht wahr? Ansonsten sieht es echt aus, es sei denn, "Autoren" geben dir die Ausnahme ... – Mitch

+0

@Mitch du hast Recht. Das Problem war die Größe des Autoren-Arrays wurde nicht definiert. –

+0

passiert uns allen. – Mitch

Antwort

1

versuchen Sie eine der folgenden

for (int i = 0; i < xnl.Count; i++) 
{ 
    authors[i] = xnl[i].SelectSingleNode("//author").value; 
} 

ODER

for (int i = 0; i < xnl.Count; i++) 
{ 
    authors[i] = xnl[i].Attributes["author"].value; 
} 
+0

Es wird sogar nicht kompilieren. –

0

dies versuchen,

var all_elements = xmldoc.DocumentElement.SelectNodes("//catalog/book/author"); 

     foreach(XmlNode sub_elements in all_elements) 
     { 
      if(sub_elements.InnerText != "") 
      { 
       string answer = sub_elements.InnerText; 
      } 
      else 
      { 
       //null text 
      } 
     } 
Verwandte Themen