2017-08-03 3 views
0

XMLGet Wert von XML-Knoten in C#

<table> 
<row> 
    <field name="ID">22490</field> 
    <field name="post_date">2014-03-24 09:55:50</field> 
    <field name="post_title">Joe Bloggs</field> 
    <field name="post_status">Live</field> 
    <field name="post_modified">2017-07-31 15:33:46</field> 
</row> 
<row> 
    <field name="ID">29078</field> 
    <field name="post_date">2017-08-01 08:19:57</field> 
    <field name="post_title">Mary Poppins</field> 
    <field name="post_status">auto-draft</field> 
    <field name="post_modified">2017-08-01 08:19:57</field> 
</row><table> 

Im Schleife durch die xml versuchen, oben, wie kann ich den Wert "Joe Bloggs" aus dem POST_TITLE Feld oben bekommen?

Hier ist, was ich bisher:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("C:\\myxmlfile.xml"); 

XmlNodeList nodeList = xmlDoc.GetElementsByTagName("row"); 

foreach (XmlNode node in nodeList) 
{ 
    string post_title = /// how can i get this 
    string post_status = /// how can i get this 
} 

Ich kann jedoch die Nodelist Schleife durch, ich kann den Wert in jedem Feld erhalten.

+2

„einfach nicht den Wert einer Variablen zuweisen“ - was meinst du damit? Kannst du ein [mcve] posten? (Das ist eindeutig nicht das vollständige XML-Dokument, da es sonst zwei Root-Elemente hätte.) Ich empfehle auch dringend, LINQ to XML zu verwenden, aber das ist eine andere Sache. –

Antwort

1

können Sie überprüfen, ob Eigenschaftsname ist, was Sie

foreach (XmlNode node in nodeList) 
{ 
    string temp = XmlNode.SelectSingleNode("field[@name='post_title']").InnerText; 
} 

Dies wird sicher arbeiten zu erwarten sind.

+0

.InnerText gibt eine Zeichenfolge zurück, so dass temp explizit deklariert werden kann. Es ist ein bisschen besser lesbar. –

+0

In meinem Beispiel ist die node.attributes-Auflistung leer, die Werte sind innerhalb der Childnodes – Dez79

+0

@ Dez79 meine Antwort bearbeitet. Probieren Sie es jetzt. –

0

Sie können auch xPath verwenden. Diese

 XmlNodeList postTitleFields = xmlDoc.SelectNodes("//field[@name='post_title']"); 
     foreach (XmlNode postTitleField in postTitleFields) 
     { 
      string post_title = postTitleField.InnerText; 
     } 
+0

Wie kann dies verwendet werden, um mehrere Werte innerhalb des Knotens zu erhalten? – Dez79

+0

@ Dez79 Aber das beantwortet Ihre Frage genau. Wenn Sie nach etwas anderem suchen, aktualisieren Sie bitte die Frage, um das zu reflektieren. postTitleFields ist eine Sammlung, die also mehrere Werte für post_title enthält. –

0

ist, wie ich das Problem behoben:

XmlNodeList orgFields = xmlDoc.SelectNodes("//row"); 



     foreach (XmlNode org in orgFields) 
     { 
      post_title = org.ChildNodes[2].InnerText; 
      post_status = org.ChildNodes[3].InnerText; 

     }