2010-12-01 77 views
4

我正在加快Linq到C#中的XML並試圖解析以下消息,似乎沒有取得很大進展。這裏是肥皂消息我不確定我是否需要使用命名空間。這是我想要格式化的SOAP消息。任何幫助將不勝感激。我正在嘗試提取值。謝謝。使用LINQ to XML來解析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> 
+0

你可以發佈你有的代碼嗎?或者至少是一個演示問題的例子。 – 2010-12-01 22:34:39

+0

手動分析SOAP消息的任何特定原因? – 2010-12-01 22:34:56

回答

0

使用Linq的XDocument通過調用XDocument.Load()或類似方法來加載XML文本。然後你就可以通過關閉XDOC的根元素的樹走,使用功能,如

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

我相信他需要xdoc.Elements(XName.Get(「lookup」,「http:// ASR-RT /」)),因爲Xml有一個默認命名空間 – dkackman 2010-12-01 23:02:11

9

如果這是關於與SOAP服務交互,請使用 Add Service Referencewsdl.exe

如果這只是解析XML,假設你已經得到了SOAP響應到名爲soapDocument一個XDocument:

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, 
    }; 

這將會給你的你處理的完全強類型對象anonymous types一個IEnumerable在該方法內。

0

你可以得到你的XML到的XElement的,然後就去做。

​​

或者

rsp.Descendants( 「objIn」)ToList();

我認爲這是做到這一點的最佳方式。我認爲XElement是最好的選擇。