Разбор ответа SOAP с помощью C # - PullRequest
1 голос
/ 27 июля 2011

Я пытался использовать данные из API, но не смог прочитать XML-ответ из него.

Имеется в форме:

    <?xml version="1.0" standalone="no"?>
        <SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
        <SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <SOAPSDK4:GetStoreProductsResponse xmlns:SOAPSDK4="http://www.externalwebservice.com/message/">
                <StoreProducts>
                    <StoreID></StoreID>
                    <Products></Products>
                </StoreProducts>
            </SOAPSDK4:GetStoreProductsResponse></SOAP-ENV:Body>
        </SOAP-ENV:Envelope>

И что мне нужно, так это то, что внутри Продукты (пока).

Я пытался использовать Использование C # для анализа ответа SOAP (и других, чтобы не затопить это) без результатов.

Мой код:

    XDocument tst = XDocument.Load("Response.xml");
    XNamespace xmlns = "http://schemas.xmlsoap.org/soap/envelope/";
    var tstr = from result in tst.Descendants(xmlns + "StoreProducts") select result.Element("Products").Value;

Я почти уверен, что мне не хватает чего-то простого.

Любая подсказка будет по достоинству оценена.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 27 июля 2011

В вашем XML StoreProducts нет в пространстве имен XML, просто выполните:

var tstr = from result in tst.Descendants("StoreProducts") 
           select result.Element("Products").Value;

Пример кода, который вы дали, был бы успешным, если бы внутренний XML выглядел так:

  <SOAP-ENV:StoreProducts>
    <StoreID></StoreID>
    <Products></Products>
  </SOAP-ENV:StoreProducts>
1 голос
/ 27 июля 2011

Вы уверены, что вам нужно проанализировать XML?.NET очень эффективно обрабатывает SOAP с использованием прокси c #.

Вы обращались к svcutil.exe для генерации прокси?

0 голосов
/ 23 апреля 2017

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

        // read the raw request
        Request.InputStream.Seek(0, SeekOrigin.Begin);
        string xmlPayload = new StreamReader(Request.InputStream).ReadToEnd();
        XDocument doc = XDocument.Parse(xmlPayload);

        XNamespace xmlns = "urn:sobject.enterprise.soap.sforce.com";
        item.sfId = doc.Descendants(xmlns + "Id").First().Value;
        item.AccountId = doc.Descendants(xmlns + "AccountId").First().Value;
        item.FirstName = doc.Descendants(xmlns + "FirstName").First().Value;
        item.LastName = doc.Descendants(xmlns + "LastName").First().Value;
        item.XmlPayload = xmlPayload;
...