Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XmlTextReader C按值对xml排序#_C#_Xml_Visual Studio - Fatal编程技术网

C# 使用XmlTextReader C按值对xml排序#

C# 使用XmlTextReader C按值对xml排序#,c#,xml,visual-studio,C#,Xml,Visual Studio,我是C#新手,目前正在处理XML文件。我已经浏览了XmlTextReader对象。我想按值对XML文件中的一些属性进行排序,但我找不到任何简单的方法来使用XmlTextReader XDocument具有OrderBy属性,但XmlTextReader是否具有类似属性 要排序的XML <Order> <orderdate>1998-04-22T00:00:00</orderdate> </Order> <Order> <o

我是C#新手,目前正在处理XML文件。我已经浏览了XmlTextReader对象。我想按值对XML文件中的一些属性进行排序,但我找不到任何简单的方法来使用XmlTextReader

XDocument具有OrderBy属性,但XmlTextReader是否具有类似属性

要排序的XML

<Order>
  <orderdate>1998-04-22T00:00:00</orderdate>
</Order>
<Order>
  <orderdate>1998-04-07T00:00:00</orderdate>
</Order>
<Order>
  <orderdate>1998-04-30T00:00:00</orderdate>
</Order>

1998-04-22T00:00:00
1998-04-07T00:00:00
1998-04-30T00:00:00
根据,
XmlTextReader
表示提供对XML数据的快速、非缓存、仅向前的访问的读取器。因此,对XML数据进行排序实际上是不够的,因为排序需要比较和重新排列当前无序的元素。相反,
XDocument
类将是您的最佳选择

由于您只给出XML的一个片段,因此不清楚元素
Order
orderdate
是否属于某个父元素的类型。如果它们不属于任何名称空间,则可以使用和,如下所示,利用字符串的of来:

如果元素属于根XML元素上指定的名称空间,则需要使用在查询中指定该名称空间,从中可以为
顺序
构造完整的
XName
,以便在
子体
查询中使用:

        XNamespace ns = xdocument.Root.Name.Namespace;

        var items = xdocument.Descendants(ns + "Order")
            .OrderBy(o => (DateTime?)o.Element(ns + "orderdate"))
            .ToList();
或者,如果名称空间是由某个中间元素而不是根元素指定的,则最容易将名称空间指定为字符串文字:

        XNamespace ns = "http://MiddleNamespace";

        var items = xdocument.Descendants(ns + "Order")
            .OrderBy(o => (DateTime?)o.Element(ns + "orderdate"))
            .ToList();

工作。

来自
XmlTextReader
的读取器提供对XML数据的快速、非缓存、仅转发访问。所以基本上不,它不做排序,而
XDocument
可能是你最好的选择;如果你能更详细地解释你的问题,我们也许能给出另一个建议。顺便说一下,这个类已经过时了,请使用。我有一个包含日期的不同属性的xml文件。我想根据这些属性的值按升序对其进行排序。为什么要使用xmltextreader代替xdocument?与xdocument相比,xmltextreader似乎更容易理解?但我会给xdocument一个机会。您发布的示例中没有属性,只有带有文本值的元素。也不是说元素的属性在XML中的顺序无关紧要——所以您的问题可能是关于其他的东西,或者您在某种意义上使用的术语“属性”与XML无关。
        XNamespace ns = "http://MiddleNamespace";

        var items = xdocument.Descendants(ns + "Order")
            .OrderBy(o => (DateTime?)o.Element(ns + "orderdate"))
            .ToList();