簡體   English   中英

XML 到 LINQ - 獲取按另一個元素的值排序的節點值集合

[英]XML to LINQ - Obtaining a node value collection ordered by the value of another element

我有以下 XML 我只需要抓取Id節點值但我需要按DatePaid節點順序抓取它們

<Payment>
    <Id>47398</Id>
    <DatePaid>09/01/2019 10:44:08</DatePaid>
</Payment>
<Payment>
    <Id>63523</Id>
    <DatePaid>09/07/2019 10:04:02</DatePaid>
</Payment>
<Payment>
    <Id>94902</Id>
    <DatePaid>09/05/2019 10:32:09</DatePaid>
</Payment>

所以結果列表將按此順序排列

47398
94902
63523

我認為這將是使用 LINQ 流利語法的方法

XDocument xResults = XDocument.Parse(responseXml);
List<string> sortedRecordIds = xResults.Descendants("Id")
                                .OrderBy(d => DateTime.Parse(d.Element("DatePaid").Value).Date)
                                .Select(d => d.Value)
                                .ToList();

但這會引發異常。 我是否錯誤地使用了排序?

如果您可以使用 XMLDocument 而不是 XDocument,則可以這樣實現。

你的 XML (我認為你有一個根元素):

<root>
    <Payment>
        <Id>47398</Id>
        <DatePaid>09/01/2019 10:44:08</DatePaid>
    </Payment>
    <Payment>
        <Id>63523</Id>
        <DatePaid>09/07/2019 10:04:02</DatePaid>
    </Payment>
    <Payment>
        <Id>94902</Id>
        <DatePaid>09/05/2019 10:32:09</DatePaid>
    </Payment>
</root>

根據需要獲取的代碼:

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.LoadXml( myXmlString );
List<string> list = xmlDocument.ChildNodes[ 0 ]
    .OfType<XmlNode>()
    .OrderBy( payment => DateTime.Parse( payment.ChildNodes[ 1 ].InnerText ) )
    .Select( payment => payment.ChildNodes[ 0 ].InnerText )
    .ToList();

更新更改您的代碼以使其正常工作:

List<string> sortedRecordIds = xResults.Descendants("Payment")
    .OrderBy( d => DateTime.Parse( d.Element( "DatePaid" ).Value ).Date )
    .Select( d => d.Element("Id").Value )
    .ToList();

我想到了。

XDocument xDoc = XDocument.Parse(responseXml);
List<string> sortedRecordIds = xDoc.Descendants("Payment")
                                .OrderBy(d => d.Element("DatePaid").Value)
                                .Select(d => d.Element("Id").Value)         
                                .ToList();

我的問題是我應該使用Payment而不是Id Id節點開始時,沒有可供排序的DatePaid元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM