Ich habe dieses XML (gespeichert in einer C # -String namens myXML
)
<?xml version="1.0" encoding="utf-16"?>
<myDataz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<listS>
<sog>
<field1>123</field1>
<field2>a</field2>
<field3>b</field3>
</sog>
<sog>
<field1>456</field1>
<field2>c</field2>
<field3>d</field3>
</sog>
</listS>
</myDataz>
und ich möchte alle <sog>
Elemente durchsuchen . Für jeden von ihnen möchte ich das Kind drucken <field1>
.
Das ist also mein Code:
XmlDocument xmlDoc = new XmlDocument();
string myXML = "<?xml version=\"1.0\" encoding=\"utf-16\"?><myDataz xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><listS><sog><field1>123</field1><field2>a</field2><field3>b</field3></sog><sog><field1>456</field1><field2>c</field2><field3>d</field3></sog></listS></myDataz>"
xmlDoc.Load(myXML);
XmlNodeList parentNode = xmlDoc.GetElementsByTagName("listS");
foreach (XmlNode childrenNode in parentNode)
{
HttpContext.Current.Response.Write(childrenNode.SelectSingleNode("//field1").Value);
}
aber anscheinend kann ich einen String nicht als XML lesen? Ich bekommeSystem.ArgumentException
Antworten:
Sie sollten die LoadXml-Methode verwenden, nicht Load:
Die Lademethode versucht, XML aus einer Datei und LoadXml aus einer Zeichenfolge zu laden. Sie können auch XPath verwenden:
quelle
SelectSingleNode("//field1").Value
sollteSelectSingleNode("//field1").InnerText
oder seinSelectSingleNode("//field1").InnerXml
, da Value null wäre, da es sich nicht um ein Attribut handelt, sondern der Wert zwischen den Tags liegt.SelectSingleNode("field1").InnerText
wenn Sie nicht immerfield1
das erste Auftreten von myDataz / listS / sog lesen möchten.Verwenden Sie Linq-XML,
ODER: Ruft die Knotenliste des
<sog>
Tags ab.quelle
Die anderen Antworten sind mehrere Jahre alt (und funktionieren nicht für Windows Phone 8.1), daher dachte ich, ich würde eine andere Option wählen. Ich habe dies verwendet, um eine RSS-Antwort für eine Windows Phone-App zu analysieren:
quelle
Oder verwenden Sie die XmlSerializer-Klasse.
quelle
Ich habe das System.Xml.Linq.XElement für diesen Zweck verwendet. Überprüfen Sie einfach den folgenden Code, um den Wert des ersten untergeordneten Knotens der XML-Datei (nicht des Stammknotens) zu lesen.
quelle