Sorting of XML file by XMLElement's InnerText

后端 未结 4 790
野性不改
野性不改 2020-12-21 12:41

Please have a look at the XML file. I would like to sort the XML file by tag


  
    ABC&         


        
相关标签:
4条回答
  • 2020-12-21 13:16

    Have you tried,

    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 讨论(0)
  • 2020-12-21 13:16

    Basically, you need to parse the XML file into a set of records, sort the records on the appropriate field, then write the result back out as a new XML file.

    0 讨论(0)
  • 2020-12-21 13:22

    if you use using System.Xml.Linq;

    then you can get the sorted xlements like this

    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));
    
    0 讨论(0)
  • 2020-12-21 13:29

    use XSLT

    E.g:

    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");
        }
    }
    
    0 讨论(0)
提交回复
热议问题