2017-01-21 4 views
1

Meine XML, die zurückgegeben wird, ist in diesem FormatParse XML-Knoten mit C#

<NewDataSet> 
    <Table> 
    <CITY>Hull</CITY> 
    <STATE>GA</STATE> 
    <ZIP>30646</ZIP> 
    <AREA_CODE>706</AREA_CODE> 
    <TIME_ZONE>E</TIME_ZONE> 
    </Table> 
</NewDataSet> 

Ich möchte TIME_ZONE enthalten den Wert extrahieren. Diese Daten werden von dieser Syntax zurückgegeben. System.Xml.XmlNode result Wie kann ich eine analysieren, um TIME_ZONE zu finden?

Ich habe die unten versucht - aber es gibt mir einen Fehler von

aus 'System.Xml.XmlNode' zu 'string' nicht konvertieren

Versuchte Syntax

System.Xml.XmlNode result = uszipcode.GetInfoByZIP(zip); 
XDocument xml = XDocument.Parse(result); 
+0

Sie mischen die Reihenfolge Ihrer Befehle. Ein 'XDocument' sollte vor der Abfrage geparst werden. – zx485

+0

@ zx485 - Ich dachte, dass ich die ZIP in die WSDL-Datei übergab und dann die XML-Struktur in meinem Beitrag analysierte, der zurückgegeben wurde. –

Antwort

1

Sie können von einem XmlNode von OuterXml Eigenschaft verwiesen String-Darstellung von XML-Teil erhalten:

System.Xml.XmlNode result = uszipcode.GetInfoByZIP(zip); 
XDocument xml = XDocument.Parse(result.OuterXml); 
String timeZone = (string)xml.Descendants("TIME_ZONE").First(); 

Oder Sie das Zielelement aus XmlNode direkt XPath und SelectSingleNode() mit finden:

System.Xml.XmlNode result = uszipcode.GetInfoByZIP(zip); 
String timeZone = xml.SelectSingleNode(".//TIME_ZONE").InnerText; 
+0

Der Ansatz von SingleNode sieht sauberer aus, aber ich verstehe es nicht. Googeln Sie es jetzt, damit ich etwas neues mit XML lernen kann, danke für die Antwort –

+1

Gern geschehen. Nur eine Seite, nichts besonderes mit 'SelectSingleNode', akzeptiert einfach * XPath-Ausdruck * als String. Der mächtige Teil hier ist der XPath. Sie können XPath verwenden, um XML anhand verschiedener Kriterien abzufragen. Sie können XPath getrennt von C# erlernen. Verwenden Sie XPath-Tester, um herumzuspielen, während Sie es lernen. Ich verwende hauptsächlich [xpattestrer] (http://www.xpatestester.com/xpath) und [xpatheval] (http://xpatheval.apphb.com/) – har07

-1

Sieht aus wie Sie einen Tippfehler haben. Der Fehler tritt auf, wenn ein XMLNode übergeben wird, wenn eine Zeichenfolge für XmlDocument.Parse erwartet wird. Versuchen Sie folgendes:

XmlNode result = uszipcode.Get... 
string myNodeValue = result.OutterXml; // this will give you XML node tree you need as a string.. 
XDocument xml = XDocument.parse(mynodeValue); 
+0

Ändern der Syntax in - string result = uszipcode.GetInfoByZIP (zip); - erzeugt einen Fehler von Kann den Typ 'System.Xml.XmlNode' nicht implizit in 'String' umwandeln –

+0

Dann gibt die Methode bereits einen xmlnode zurück. Kein Ergebnis an xmldoc übergeben. Holen Sie sich einfach den Wert von zB result.InnerText – gsilva2016

+0

das ist mein Problem, ich weiß nicht, wie man den Wert daraus " –