如何从 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 文件中按编号获取子节点的主要内容,如果未能解决你的问题,请参考以下文章