0

我试图通过属性“时间”对我的 XML 中的数据进行排序并在 TreeView 中显示

我有类似的 XML 文件

<main>
  <data url="http://www.r.com/" data="13.10.2013 20:16:33" times="6" />
  <data url="https://www.google.com/" data="13.10.2013 20:16:14" times="5" />
  <data url="http://ya.com/" data="13.10.2013 19:21:15" times="26" />
</main>

我想要的是按属性“时间”对所有节点进行排序。如果我可以获得任何节点(1、2 或 3),我可以获取属性并将其与第一个 ono 进行比较 - 所以可以进行一些排序。但我无法获得所需的元素。

所以问题 - 我如何从 XML 文件中获取任何节点,如果我只知道它的序列号或者我如何按某些属性对 XML 文件进行排序?

找到了,如果我有 id - 我可以使用类似的东西

XmlDocument myXml = new XmlDocument();
myXml.Load(myfile);
myXml.GetElementById(`here put id`).GetAttribute("required attribute")

但我没有任何身份证。

编辑:

<main>
  <data url="http://ya.com/" data="13.10.2013 19:21:15" times="**26**" />
  <data url="http://www.r.com/" data="13.10.2013 20:16:33" times="**6**" />
  <data url="https://www.google.com/" data="13.10.2013 20:16:14" times="**5**" />
</main>
4

2 回答 2

1

我是 Linq->Xml 的新手,所以我不知道这方面的效率,但它似乎有效。

XDocument xdoc = XDocument.Parse(xml);
var ordered = xdoc.Descendants("data")
                  .OrderByDescending(x => int.Parse(x.Attribute("times").Value))
                  .ToArray();
xdoc.Root.RemoveAll();
xdoc.Root.Add(ordered);
于 2013-10-13T18:36:55.233 回答
1

由于要在 TreeView 中显示数据,因此需要先从 xml 中获取所有数据,然后对其进行排序times

XDocument doc=XDocument.Load(url);
//extract all data from xml
var data=doc.Descendants("data")
            .Select(x=>
               new
               {
                   url=x.Attribute("url").Value,
                   data=x.Attribute("data").Value,
                   times=int.Parse(x.Attribute("times").Value)
               } 
);

foreach(var datum in data.OrderByDescending(x=>x.times))
{
    datum.url;
    datum.data;
    datum.times;
}
于 2013-10-13T18:39:18.570 回答