Использование LINQ to XML для анализа сообщения SOAP - PullRequest
5 голосов
/ 02 декабря 2010

Я набираю скорость в Linq to XML в C # и пытаюсь разобрать следующее сообщение и, похоже, не добился большого прогресса Вот мыльное сообщение, я не уверен, что мне, возможно, нужно использовать пространство имен. Вот сообщение SOAP, которое я пытаюсь отформатировать. Любая помощь будет принята с благодарностью. Я пытаюсь извлечь значения. Спасибо.

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
 <soap:Body>
  <Lookup xmlns="http://ASR-RT/">
   <objIn>
    <transactionHeaderData>
     <intWebsiteId>1000</intWebsiteId>
     <strVendorData>test</strVendorData>
     <strVendorId>I07</strVendorId>
    </transactionHeaderData>
    <intCCN>17090769</intCCN>
    <strSurveyResponseFlag>Y</strSurveyResponseFlag>
   </objIn>
  </CCNLookup>
 </soap:Body>
</soap:Envelope>

Ответы [ 3 ]

9 голосов
/ 02 декабря 2010

Если речь идет о взаимодействии со службой SOAP, используйте Добавить ссылку на службу или wsdl.exe .

Если речь идет только об анализе XML, предполагая,вы получили ответ SOAP в XDocument с именем soapDocument:

XNamespace ns = "http://ASR-RT/";
var objIns = 
    from objIn in soapDocument.Descendants(ns + "objIn")
    let header = objIn.Element(ns + "transactionHeaderData")
    select new
    {
        WebsiteId = (int) header.Element(ns + "intWebsiteId"),
        VendorData = header.Element(ns + "strVendorData").Value,
        VendorId = header.Element(ns + "strVendorId").Value,
        CCN = (int) objIn.Element(ns + "intCCN"),
        SurveyResponse = objIn.Element(ns + "strSurveyResponseFlag").Value,
    };

, который даст вам IEnumerable из анонимных типов , с которыми вы имеете дело как полностью строго типизированные объекты в этом методе.

0 голосов
/ 12 апреля 2012

Вы можете получить свой XML в XElement, а затем просто выполните:

rsp.Descendants("Lookup").ToList();

или

rsp.Descendants ("objIn"). ToList ();

Я думаю, что это лучший способ сделать это.Я думаю, что XElement - лучший выбор.

0 голосов
/ 02 декабря 2010

Используйте XDocument Linq для загрузки текста XML, вызывая XDocument.Load() или аналогичный Затем вы можете пройтись по дереву элементов Root в xdoc, используя такие функции как

foreach (var x in xdoc.Elements("Lookup"))
{...}
...