2017-01-21 4 views
1

Мой XML, который возвращается в этом форматеАнализировать XML узел с C#

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

Я хочу, чтобы извлечь значение, содержащееся в TIME_ZONE. Эти данные возвращаются с помощью этого синтаксиса: System.Xml.XmlNode result Как я могу разобрать XmlNode, чтобы найти TIME_ZONE?

Я попытался ниже - но это дает мне ошибку

не может конвертировать из 'System.Xml.XmlNode' в 'строка'

Синтаксис Попытанные

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

Вы смешиваете порядок своих команд. Перед запросом следует проанализировать 'XDocument'. – zx485

+0

@ zx485 - Я думал, что передаю zip в файл wsdl, а затем разбираю структуру xml в моем сообщении, которое возвращается. –

ответ

1

Вы можете получить строковое представление XML части, на которую ссылается на XmlNode из OuterXml собственности:

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

Или, вы можете найти целевой элемент из XmlNode непосредственно с помощью XPath и SelectSingleNode():

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

Подход SIngleNode выглядит чище, но я этого не понимаю. Google googling теперь, чтобы я мог узнать что-то новое с XML, спасибо за ответ. –

+1

Добро пожаловать. Просто в стороне, ничего особенного с 'SelectSingleNode', он просто принимает выражение XPath * как строку. Мощная часть здесь - XPath. Вы можете использовать XPath для запроса XML с использованием различных критериев. Вы можете изучать XPath отдельно от C#. Используйте тестер XPath, чтобы играть, пока вы его изучаете. В основном я использую [xpathtestrer] (http://www.xpathtester.com/xpath) и [xpatheval] (http://xpatheval.apphb.com/) – har07

-1

Похоже, у вас есть опечатка. Ошибка связана с передачей XMLNode, когда ожидается строка для XmlDocument.Parse. Попробуйте это:

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

Изменение моего синтаксиса на - string result = uszipcode.GetInfoByZIP (zip); - выдает ошибку Can неявно конвертировать тип 'System.Xml.XmlNode' в 'string' –

+0

Тогда метод уже возвращает xmlnode. Не нужно передавать результат в xmldoc. Просто получите значение от него, например result.InnerText – gsilva2016

+0

, что является моей проблемой, я не знаю, как «получить значение от него» –

Смежные вопросы