C# XML到LINQ-获取按另一个元素的值排序的节点值集合

C# XML到LINQ-获取按另一个元素的值排序的节点值集合,c#,linq-to-xml,fluent,C#,Linq To Xml,Fluent,我有以下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

我有以下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>
我认为这将是使用LINQfluent语法的方法

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();
XDocument xResults=XDocument.Parse(responseXml);
List sortedRecordIds=xResults.substands(“Id”)
.OrderBy(d=>DateTime.Parse(d.Element(“DatePaid”).Value).Date)
.选择(d=>d.Value)
.ToList();

但这引发了一个例外。我使用排序有误吗?

如果您可以使用XMLDocument而不是XDocument,那么您可以这样做

您的XML(我认为您有一个根元素):


47398
09/01/2019 10:44:08
63523
09/07/2019 10:04:02
94902
09/05/2019 10:32:09
根据需要获取的代码:

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();
XmlDocument XmlDocument=new XmlDocument();
LoadXml(myXmlString);
List List=xmlDocument.ChildNodes[0]
第()类
.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();
List sortedRecordIds=xResults.substands(“付款”)
.OrderBy(d=>DateTime.Parse(d.Element(“DatePaid”).Value).Date)
.Select(d=>d.Element(“Id”).Value)
.ToList();

如果您可以使用XMLDocument而不是XDocument,您可以这样实现

您的XML(我认为您有一个根元素):


47398
09/01/2019 10:44:08
63523
09/07/2019 10:04:02
94902
09/05/2019 10:32:09
根据需要获取的代码:

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();
XmlDocument XmlDocument=new XmlDocument();
LoadXml(myXmlString);
List List=xmlDocument.ChildNodes[0]
第()类
.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();
List sortedRecordIds=xResults.substands(“付款”)
.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();
XDocument xDoc=XDocument.Parse(responseXml);
List sortedRecordIds=xDoc.后代(“付款”)
.OrderBy(d=>d.Element(“DatePayed”).Value)
.Select(d=>d.Element(“Id”).Value)
.ToList();
我的问题是我应该使用
Payment
而不是
Id
。当从
Id
节点开始时,没有可以排序的
DatePaid
元素。

我找到了答案

XDocument xDoc = XDocument.Parse(responseXml);
List<string> sortedRecordIds = xDoc.Descendants("Payment")
                                .OrderBy(d => d.Element("DatePaid").Value)
                                .Select(d => d.Element("Id").Value)         
                                .ToList();
XDocument xDoc=XDocument.Parse(responseXml);
List sortedRecordIds=xDoc.后代(“付款”)
.OrderBy(d=>d.Element(“DatePayed”).Value)
.Select(d=>d.Element(“Id”).Value)
.ToList();

我的问题是我应该使用
Payment
而不是
Id
。从
Id
节点开始时,没有要排序的
DatePaid
元素。

什么样的异常?请提供。
对象引用未设置为对象的实例
-通常在LINQ语句出现问题时发生此错误,因为您使用“Id”作为数据中心。切换到“付款”,它应该可以正常工作。我已经更新了我的答案。什么样的例外?请提供。
对象引用未设置为对象的实例
-通常在LINQ语句出现问题时发生此错误,因为您使用“Id”作为数据中心。切换到“付款”,它应该可以正常工作。我已经更新了我的答案。有什么原因不能在
XDocument
中完成吗?我想找出在尝试使用
OrderBy
时出现错误的原因。是否存在无法在
XDocument
中执行此操作的原因?我想找出在尝试使用
OrderBy
时出错的原因。