繁体   English   中英

从LINQ到xml的xml-rpc

[英]LINQ to xml for xml-rpc

我有一个如下所示的xml:

<methodResponse>
  <params>
    <param>
      <value>
        <struct>
          <member>
            <name>originTransactionID</name>
            <value>
              <string>23915</string>
            </value>
          </member>
          <member>
            <name>responseCode</name>
            <value>
              <i4>0</i4>
            </value>
          </member>
        </struct>
      </value>
    </param>
  </params>
</methodResponse>

我想检查是否有任何成员具有名称为responseCode的元素,如果有,我想选择该值。

我可以这样选择:

var test = xDocument.Descendants("member").Elements("value").LastOrDefault().Value;

它的工作是因为我知道响应代码是成员的最后一个元素,但是我不确定这是否是正确的方法。 尽管xml是预定义的,但查询此属性还有什么更好的方法?

谢谢

您可以使用XPath查询:

var xPath = "/methodResponse/params/param/value/struct/member/name[text()='responseCode']/../value/i4";
var value = xDocument.XPathSelectElement(xPath).Value;

注意如何使用name[text()='responseCode']选择正确的member元素。 即使更改了member元素的顺序或另一个member显示为最后一个元素,这也将起作用。

是的,您是对的,因为您知道要查找的元素位于最后一个位置,因此LastOrDefault在您的情况下有效,但是对于现实情况而言,显然不是动态查询。

您可以使用FirstOrDefault来查找整个集合中的第一个匹配元素并获取如下值:

var test = (string)xDocument.Descendants("member")
             .FirstOrDefault(x => (string)x.Element("name") == "responseCode")
             ?.Element("value");

样品小提琴。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM