2012-02-29 3 views
1

Пожалуйста, посмотрите XML-файл. Я хотел бы отсортировать файл XML по тегуСортировка XML-файла по внутреннему тексту XMLElement

<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> 

Таким образом, ответ будет следующим.

<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> 

Как я могу сделать это в C# 3.5?

+1

Пытались ли вы что-нибудь? –

+0

@Haris Hasan Ohh ... Я новичок в XML. Но я пытаюсь :) – Rauf

ответ

5

пытались ли вы,

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); 
0

В принципе, вам необходимо проанализировать XML-файл в виде набора записей, отсортировать записи в соответствующем поле, а затем записать результат в виде нового XML-файла.

+0

Вы можете использовать методы DataTable.ReadXml() и DataTable.WriteXml(). –

0

если вы используете используя System.Xml.Linq;

, то вы можете получить отсортированные xlements как этот

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)); 
1

использования 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> 

Sample.cs:

//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"); 
    } 
} 
Смежные вопросы