[英]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.