簡體   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