C# xml 根据属性排序然后保存回文件,或者根据属性按顺序读取

hao270431700 2016-12-11 09:58:23

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<item>
<i1 Tag = "1" ></i1>
<i2 Tag = "3" ></i2>
<i3 Tag = "2" ></i3>
<i7 Tag = "7" ></i7>
<i4 Tag = "4" ></i4>
<i5 Tag = "5" ></i5>
<i6 Tag = "6" ></i6>
</item>
</configuration>



public void SortXMLDoc_Test(string address)
{
XmlDocument dom = new XmlDocument();
dom.Load(address);
XPathDocument pathdoc = new XPathDocument(address);
//XmlNodeList nodes = dom.SelectSingleNode("UserPattern").ChildNodes;

XmlNode xn = dom.SelectSingleNode("configuration");

XPathNavigator nav = pathdoc.CreateNavigator();
string xpath = String.Format("/configuration/item");
XPathExpression exp = nav.Compile(xpath);
exp.AddSort("@Tag",XmlSortOrder.Descending,XmlCaseOrder.None,"",XmlDataType.Text);
XPathNodeIterator nodeIter = nav.Select(exp);

xn.RemoveAll();

while (nodeIter.MoveNext())
{
// XmlElement xe = dom.createElement("Tag");
xe.SetAttribute("Tag", nodeIter.Current.GetAttribute("Tag", ""));
xn.AppendChild(xe);
}
dom.Save(address);
}


想要的结果

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<item>
<i1 Tag = "1" ></i1>
<i3 Tag = "2" ></i3>
<i2 Tag = "3" ></i2>
<i4 Tag = "4" ></i4>
<i5 Tag = "5" ></i5>
<i6 Tag = "6" ></i6>
<i7 Tag = "7" ></i7>
</item>
</configuration>
...全文
376 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 3 楼 hao270431700 的回复:
[quote=引用 2 楼 starfd 的回复:]
XElement.Parse(xml).Element("item").OrderBy(e=>e.Attribute["Tag"].Value)
XElement对象里 没有OrderBy 这个属性。套路不对啊![/quote] 你没有using
using System.Xml.Linq
hao270431700 2016-12-17
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
XElement.Parse(xml).Element("item").OrderBy(e=>e.Attribute["Tag"].Value)
XElement对象里 没有OrderBy 这个属性。套路不对啊!
  • 打赏
  • 举报
回复
XElement.Parse(xml).Element("item").OrderBy(e=>e.Attribute["Tag"].Value)
  • 打赏
  • 举报
回复
贴出你自己的 bug 调试来。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧