我试图通过属性“times”对我的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文件进行排序?
发现,如果我有身份证明 - 我可以使用像
这样的东西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>
答案 0 :(得分: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);
答案 1 :(得分: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;
}