使用LINQ to XML来解析SOAP消息

时间:2010-12-01 22:31:29

标签: c# soap linq-to-xml

我正在使用C#加速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>

3 个答案:

答案 0 :(得分: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,
    };

这将为您提供一个IEnumerable anonymous types,作为该方法中完全强类型的对象。

答案 1 :(得分:0)

使用Linq的XDocument通过调用XDocument.Load()或类似内容来加载XML文本。然后,您可以使用

之类的函数遍历xdoc根目录下的元素树
foreach (var x in xdoc.Elements("Lookup"))
{...}

答案 2 :(得分:0)

您可以将XML转换为XElement,然后执行:

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

rsp.Descendants( “objIn”)ToList();

我认为这是最好的方法。我认为XElement是最好的选择。