Разбор XML-результата от веб-службы - PullRequest
2 голосов
/ 28 января 2009

Я новичок в веб-службах и XML, и мне было поручено проанализировать возвращенный пакет ответов XML.

Как лучше всего проанализировать результат XML в C # .NET?

Мне нужно привязать сетку данных в качестве конечного результата поискового запроса.

Ответы [ 7 ]

3 голосов
/ 28 января 2009

Есть фундаментальная вещь, которую вы должны знать о синтаксическом анализе XML, прежде чем решить, какой метод лучше.

С объектами вида XMLDocument весь XML загружается в память, где, как и в случае с объектом считывателя, это поток, только обрабатываемый фрагмент загружается в память. Очевидно, что читатель использует мало памяти, но не даст вам возможности вернуться назад / впереди текущего обрабатываемого узла. В то время как у вас есть много свободы с документом, хотя недостатком является то, что в памяти есть копия XML-файла.

Соответственно, если ожидается, что размер xml будет большим, XmlDocument не будет оптимальным. Какая логика применяется при использовании xml, также повлияет на выбор.

3 голосов
/ 28 января 2009

Если у вас есть доступ к wsdl для веб-службы, есть утилита wsdl, которая сгенерирует необходимые классы и десериализацию для вызова веб-службы и анализа ее ответа на эти классы.

Используя пример веб-сервиса на w3schools , вы просто запустите следующую командную строку:

wsdl "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL"

Это создаст файл TempConvert.cs, который вы можете добавить в свой проект. Тогда вызов веб-сервиса - это просто вызов сгенерированных функций:

Double fahrenheit = 32.2;
TempConvert tempConverter = new TempConvert();
string Celcius = tempConverter.FahrenheitToCelsius(fahrenheit.ToString());

Этот класс TempConvert заботится о деталях построения XML-запроса, обращения к веб-службе и синтаксического анализа ответа обратно. Это очень простой пример, поэтому вы получаете только строку назад, но, поскольку ваш веб-сервис, скорее всего, чтобы быть немного сложнее, вы получите более сложные классы, содержащие данные, которые вы хотите в разобранном виде. В зависимости от сложности веб-службы, это может быть даже простой массив строк или такой же сложный, как иерархия гигантских классов.

1 голос
/ 28 января 2009

Если доза не имеет WSDL, вы можете использовать библиотеку, найденную под

System.Xml

Вы также можете использовать LINQ, вы можете использовать

System.Xml.Linq

Пространство имен для привязки LINQ.

Вам нужно будет посмотреть на пакет и выяснить, что это за схема.

0 голосов
/ 28 января 2009

@ LB: Вы не упомянули, какова цель анализа возвращенного XML. Если бы вы выполняли какие-то изменения в XML или запрашивали его для каких-то конкретных данных, я бы понял, но если вы хотите просто загрузить его, чтобы он мог отображаться в Datagrid, то я считаю, что у вас есть два очень простых (и обычно используется) варианты:

  • Прямая привязка DataGrid к XML или использование источника XmlDataSource в качестве посредника.
  • Загрузите XML в DataSet и привяжите свою DataGrid к этому набору данных.

Лично мне никогда не нравилось преобразовывать XML в наборы данных, если у меня нет времени для создания конкретной схемы для документа XML. Итак, я склоняюсь к первому варианту.

0 голосов
/ 28 января 2009

добавить: используя System.Xml

Когда вы просматриваете структуру XML, вы будете видеть элементы друг в друге (см. Объект XmlElement и XmlNode). У каждого есть коллекции дочерних объектов (XmlNode.ChildNodes []).

XPath - это способ перехода к определенному узлу или подмножеству узлов. Для основного обзора прочитайте эту статью .

0 голосов
/ 28 января 2009

Самый распространенный способ анализа XML в C # - это использование XMLDocument в System.XML.

Однако, если веб-сервис основан на SOAP, самый простой способ использовать его - добавить ссылку на сервис в ваш проект и позволить мастеру сгенерировать для вас код анализа.

0 голосов
/ 28 января 2009

Есть много разных способов сделать это, вы можете десериализовать xml в объект, использовать LINQ-to-XML для извлечения данных, загрузить XML в DOM и xpath-данные, и т. Д.

У вас есть XSD для пакета ответа?

...