【问题标题】:Using LINQ to XML to Parse a SOAP message使用 LINQ to XML 解析 SOAP 消息
【发布时间】:2010-12-01 22:31:28
【问题描述】:

我正在加快使用 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>

【问题讨论】:

  • 您可以发布您拥有的代码吗?或者至少是一个说明问题的例子。
  • 手动解析 SOAP 消息有什么特别的原因吗?

标签: c# soap linq-to-xml


【解决方案1】:

如果这是关于与 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,您在该方法中将其作为完全强类型的对象处理。

【讨论】:

  • 非常感谢卡梅隆,您的回答对我帮助很大,我在一天的搜索后解决了问题
【解决方案2】:

通过调用XDocument.Load() 或类似方法,使用Linq 的XDocument 加载XML 文本。然后,您可以使用诸如

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

【讨论】:

  • 我相信他需要 xdoc.Elements(XName.Get("lookup", "ASR-RT/")) 因为 Xml 有一个默认命名空间
【解决方案3】:

您可以将您的 XML 放入一个 XElement 中,然后这样做:

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

或者

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

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

【讨论】:

    猜你喜欢
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多