C# 按XMLElement对XML文件进行排序';s内部文本
请看一下XML文件。我想按C# 按XMLElement对XML文件进行排序';s内部文本,c#,xml,sorting,C#,Xml,Sorting,请看一下XML文件。我想按标记对XML文件进行排序 <MyRootNode> <Tab> <Name>ABC</Name> <Order>200</Order> </Tab> <Tab> <Name>MNO</Name> <Order>100</Order> </Tab> <Tab&g
标记对XML文件进行排序
<MyRootNode>
<Tab>
<Name>ABC</Name>
<Order>200</Order>
</Tab>
<Tab>
<Name>MNO</Name>
<Order>100</Order>
</Tab>
<Tab>
<Name>XYZ</Name>
<Order>90</Order>
</Tab>
<Tab>
<Name>QWE</Name>
<Order>40</Order>
</Tab>
<Tab>
<Name>KML</Name>
<Order>20</Order>
</Tab>
</MyRootNode>
基础知识
200
MNO
100
XYZ
90
QWE
40
KML
20
因此,答案如下
<MyRootNode>
<Tab>
<Name>KML</Name>
<Order>20</Order>
</Tab>
<Tab>
<Name>QWE</Name>
<Order>40</Order>
</Tab>
<Tab>
<Name>XYZ</Name>
<Order>90</Order>
</Tab>
<Tab>
<Name>MNO</Name>
<Order>100</Order>
</Tab>
<Tab>
<Name>ABC</Name>
<Order>200</Order>
</Tab>
</MyRootNode>
KML
20
QWE
40
XYZ
90
MNO
100
基础知识
200
如何在C#3.5中实现这一点?基本上,您需要将XML文件解析为一组记录,在适当的字段中对记录进行排序,然后将结果写回新的XML文件。如果使用 使用System.Xml.Linq 然后你可以得到像这样的分类数据
var xnodes = oldXDoc.Element("MyRootNode").Elements();
var sortedXNodes = xnodes.OrderBy(node => Convert.ToInt32( node.Element("Order").Value));
var newXdoc = new XDocument(new XElement("MyRootNode", sortedXNodes));
使用XSLT
例如:
dataSort.xslt:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<xsl:element name="MyRootNode">
<xsl:apply-templates select="MyRootNode" />
</xsl:element>
</xsl:template>
<xsl:template match="MyRootNode">
<xsl:for-each select="Tab">
<xsl:sort select="Order/text()" data-type="number"/>
<xsl:copy-of select="." />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
//convert data.xml to sortedData.xml
using System;
using System.Xml.Xsl;
class Sample {
static public void Main(){
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("dataSort.xslt");
xslt.Transform("data.xml", "sortedData.xml");
}
}
你试过了吗
XElement root = XElement.Load(xmlfile);
var orderedtabs = root.Elements("Tab")
.OrderBy(xtab => (int)xtab.Element("Order"))
.ToArray();
root.RemoveAll();
foreach(XElement tab in orderedtabs)
root.Add(tab);
root.Save(xmlfile);
你试过什么吗?@Haris Hasan Ohh。。。我是XML新手。但是我正在尝试:)您可以使用DataTable.ReadXml()和DataTable.WriteXml()方法。