如何从 XML 文件中按编号获取子节点

Posted

技术标签:

【中文标题】如何从 XML 文件中按编号获取子节点【英文标题】:How to get child node by number from XML file 【发布时间】:2013-10-13 18:21:00 【问题描述】:

我正在尝试按属性“时间”对我的 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>

【问题讨论】:

你的问题不清楚!你想从那个 xml 中得到什么! 我正在尝试按属性对每个节点进行排序 - 所以结果必须像我的编辑一样 - 请查看它 我的帖子Am trying to make sorting of data in my XML file and show it in TreeView中的这个世界如何@ 所以你想按日期对数据进行排序,然后在树视图中显示它! 不是按日期 - 按访问次数,属性“次” 【参考方案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);

【讨论】:

从不使用 LINQ...刚开始阅读,但无论如何,谢谢【参考方案2】:

由于要在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;

【讨论】:

排序似乎需要降序:) @SriramSakthivel 是的..确实。谢谢..:)

以上是关于如何从 XML 文件中按编号获取子节点的主要内容,如果未能解决你的问题,请参考以下文章

计算特定XML节点c#的子节点数[重复]

如何使用 XQuery 获取 XML 文件中的子节点数

如何从父 yaml 节点获取完整的 yaml 节点子对象?

根据节点在前一节点中出现的顺序,在节点中按顺序编号占位符

如何使用 LINQ 在 XML 中按名称获取元素

如何反序列化xml文件的子节点