【问题标题】:ASP.NET LINQ to XML how to reach an node/element just giving the name?ASP.NET LINQ to XML 如何访问仅给出名称的节点/元素?
【发布时间】:2015-09-25 12:31:54
【问题描述】:

以下代码中我想获取粗体元素:_connectionId 并返回。

有两个return标签,我需要得到“return”和相对值和“_connectionid”一样

<Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  <Body>
       <login_newResponse xmlns=\"http:XXXXXXXXXXXX.wsdl"> 
          <return>
              <_**connectionid**>@@@@@@@@@@@@@AHT@Q@@@@@D@GR@SUEF</_**connectionid**>
              <**return**>CONNESSIONE AVVENUTA</**return**> 
          </return> 
       </login_newResponse> 
    </Body> 
 </Envelope>

我已尝试使用此代码

XDocument XML = XDocument.Load(s);
var lv1s = from lv1 in XML.Descendants("Body")
           select lv1.Nodes();

我获得了一个 XML 字符串列表,但无法获得特定元素。 有没有办法提取任何仅指示名称的元素?

谢谢!

【问题讨论】:

  • 这看起来像一个SOAP响应,你为什么不把它反序列化成一个对象?
  • 我已经搜索过,但没有找到任何关于使用 WebApi 的 SOAP 服务的信息,所以我自己包装。
  • 无论如何,如果你有任何建议肥皂相关我也有兴趣
  • WebAPI 仅支持 RESTful 服务。如果您想使用 SOAP,则不应使用它。请改用 WCF。您还在编写自己的 SOAP 服务吗?如果是这样,您真的应该考虑使用 REST,因为 SOAP 是一个垂死的协议。
  • 那不是我自己的肥皂服务。我的应用程序用于前端 html + angularJs,而在后端我有自己的 RestAPI。为了与我在 Web 上公开的外部应用程序交互,我正在包装一个旧的 Soap 服务。功能不多,我只需要使用几个......这就是我决定包装肥皂的原因

标签: c# asp.net xml linq linq-to-xml


【解决方案1】:

如果你只是想快速找到这两个值,你可以这样做:

        XNamespace ns = "http:XXXXXXXXXXXX.wsdl";
        var data = XML.Root.Elements("Body").Elements(ns + "login_newResponse").Elements(ns + "return")
            .Select(e => new { ConnectionId = (string)e.Element(ns + "_connectionid"), Return = (string)e.Element(ns + "return") })
            .FirstOrDefault();

您可能需要将 "http:XXXXXXXXXXXX.wsdl" 替换为“真实”命名空间。

【讨论】:

  • 感谢您的回答,效果很好。有没有办法让它更通用?
  • 我的意思是一种选择新对象的方法:根据我在第一个“”对象旁边找到的标签获取新的字符串属性有吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多