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