<Dictrionary>
<A>
<Dic name="Awa" />
<Dic name="Ac" />
<Dic name="Aa" />
</A>
<B>
<Dic name="Bz" />
<Dic name="Bc" />
<Dic name="Ba" />
</B>
....
</Dictrionary> 使它们按照,name属性按字母排序。我的代码是参照网上的,不知道对不对!
我的代码是参照网上的,不知道对不对!
我的代码是参照网上的,不知道对不对!
我的代码是参照网上的,不知道对不对!
我的代码是参照网上的,不知道对不对!
XmlDocument doc = new XmlDocument();
doc.Load(@"customers.xml");
//创建导航器
XPathNavigator nav = doc.CreateNavigator();XPathExpression exp = nav.Compile("/Dictrionary/A");
exp.AddSort("Dic", XmlSortOrder.Descending, XmlCaseOrder.None, "", XmlDataType.Text);XPathNodeIterator iter = nav.Select(exp);
//循环迭代对象
while (iter.MoveNext())
{
XPathNavigator copy = iter.Current.Clone();
copy.MoveToFirstChild();
copy.MoveToNext();
copy.MoveToNext(); }
<A>
<Dic name="Awa" />
<Dic name="Ac" />
<Dic name="Aa" />
</A>
<B>
<Dic name="Bz" />
<Dic name="Bc" />
<Dic name="Ba" />
</B>
....
</Dictrionary> 使它们按照,name属性按字母排序。我的代码是参照网上的,不知道对不对!
我的代码是参照网上的,不知道对不对!
我的代码是参照网上的,不知道对不对!
我的代码是参照网上的,不知道对不对!
我的代码是参照网上的,不知道对不对!
XmlDocument doc = new XmlDocument();
doc.Load(@"customers.xml");
//创建导航器
XPathNavigator nav = doc.CreateNavigator();XPathExpression exp = nav.Compile("/Dictrionary/A");
exp.AddSort("Dic", XmlSortOrder.Descending, XmlCaseOrder.None, "", XmlDataType.Text);XPathNodeIterator iter = nav.Select(exp);
//循环迭代对象
while (iter.MoveNext())
{
XPathNavigator copy = iter.Current.Clone();
copy.MoveToFirstChild();
copy.MoveToNext();
copy.MoveToNext(); }
排序完,保存xml文件。
排序完,保存xml文件。
排序完,保存xml文件。
排序完,保存xml文件。
排序完,保存xml文件。
排序完,保存xml文件。
排序完,保存xml文件。
排序完,保存xml文件。
排序完,保存xml文件。
排序完,保存xml文件。
提供个方法,不过好像很烦
1:把xml读成dataset,用dataview就行排序,
2:把排序的dataset WriteXMl()
就可以了!
<DocumentElement>
<Dic name="Aa" />
<Dic name="Ac" />
<Dic name="Awa" />
<Dic name="Ba" />
<Dic name="Bc" />
<Dic name="Bz" />
</DocumentElement>按dataSet后,字母没了!!!!!!
这还有分。解决后一并送上。
自己调试下就可以了啊你最后想要什么结果??
A和B是否需要排序???看一下如下代码如果不符合你的要求
把你的要求说的详细些
贴出来你排序后想要的结果StringBuilder unsorted = new StringBuilder();
StringBuilder sorted = new StringBuilder();XPathDocument doc = new XPathDocument("e:\\2.xml"); //这里改成你自己的文件
XPathNavigator nav = doc.CreateNavigator();
string xpath = "/Dictrionary/A/Dic";
XPathNodeIterator nodeIter1 = nav.Select(xpath);
while (nodeIter1.MoveNext())
{
unsorted.Append(nodeIter1.Current.GetAttribute("name", "") + "\n");
}
Console.WriteLine(unsorted.ToString());//排序之前的状态XPathExpression exp = nav.Compile(xpath);
exp.AddSort("@name", XmlSortOrder.Ascending, XmlCaseOrder.None, "", XmlDataType.Text);
XPathNodeIterator nodeIter2 = nav.Select(exp);
while (nodeIter2.MoveNext())
{
sorted.Append(nodeIter2.Current.GetAttribute("name", "") + "\n");
}
Console.WriteLine(sorted.ToString());//排序后的状态上面的例子只是对A下面的Dic节点的Name属性排序!!!
我最后的结果,是想把那个xml文件。排序!
我最后的结果,是想把那个xml文件。排序!
我最后的结果,是想把那个xml文件。排序!
doc.Load(@"D:\Project\C#Test\WindowsApplication1\WindowsApplication3\Config.xml");
XmlNodeList nodeList = doc.SelectNodes("/Dictrionary/*/*"); List <XmlElement> list = new List <XmlElement>();
foreach (XmlElement el in nodeList)
{
list.Add(el);
} list.Sort(new sort()); XmlNode node = doc.SelectSingleNode("/Dictrionary");
int index = 0;
foreach (XmlNode n in node.ChildNodes)
{ int count = n.ChildNodes.Count;
n.RemoveAll(); for (int j = index; j < list.Count; j++)
{
n.AppendChild(list[j]);
index++;
if (index == count)
break;
}
}
doc.Save(@"D:\Project\C#Test\WindowsApplication1\WindowsApplication3\Config.xml");
public class sort : IComparer <XmlElement>
{
#region IComparer <XmlNode> Members public int Compare(XmlElement x, XmlElement y)
{
return string.Compare(x.Attributes[0].Value, y.Attributes[0].Value);
} #endregion
}
帮你顶下。
string xmlPath = "e:\\2.xml";
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlPath);
XPathDocument pathdoc = new XPathDocument(xmlPath);
XmlNodeList ndoes = xmldoc.DocumentElement.ChildNodes;
foreach (XmlNode node in ndoes)
{
XPathNavigator nav = pathdoc.CreateNavigator();
string xpath = String.Format("/Dictrionary/{0}/Dic", node.Name);
XPathExpression exp = nav.Compile(xpath);
exp.AddSort("@name", XmlSortOrder.Ascending, XmlCaseOrder.None, "", XmlDataType.Text);
XPathNodeIterator nodeIter = nav.Select(exp);
node.RemoveAll();
while (nodeIter.MoveNext())
{
XmlElement xe = xmldoc.CreateElement("Dic");
xe.SetAttribute("name", nodeIter.Current.GetAttribute("name", ""));
node.AppendChild(xe);
}
}
xmldoc.Save(xmlPath);
大概意思就是
取得
<Dic name="Aa" />
<Dic name="Ac" />
<Dic name="Awa" />
<Dic name="Ba" />
<Dic name="Bc" />
<Dic name="Bz" />
这些数据
然后排序以下然后再找到
<Dictrionary>
<A>
<Dic name="Awa" />
<Dic name="Ac" />
<Dic name="Aa" />
</A>
<B>
<Dic name="Bz" />
<Dic name="Bc" />
<Dic name="Ba" />
</B>
</Dictrionary>
下面的a 和b 节点
按照它们的count 添加排序好的节点其实14楼的方法很好