2011-07-27 164 views
0

我一直在嘗試使用API​​中的數據,但是我一直無法從中讀取XML響應。用C解析SOAP響應#

它卡梅斯形式:

<?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> 

而我需要的是裏面是什麼產品(現在)。

我試圖使用Using C# to parse a SOAP Response(和其他人沒有洪水這個)沒有結果。

我的代碼:

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; 

我幾乎可以肯定,我失去了一些東西基本。

任何線索將非常感激。

謝謝。

+0

你檢查這個鏈接發送的XML? http://stackoverflow.com/questions/2876012/using-c-to-parse-a-soap-response – Peyman

回答

1

在你的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> 
+0

謝謝。這只是我需要的。 – Elder

1

是你確定你需要解析XML?使用c#代理處理SOAP的.NET非常高效。

您是否期待svcutil.exe生成代理?

0

對我來說,我需要它來讀取POST請求

 // 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;