2013-08-27 4 views
0

Есть ли способ сортировать xmlnodes на основе значений атрибутов, считать, что я не могу использовать linq. Так как я использую .NET 2.0.C#: Сортировка узла XML с использованием значения атрибута

Пример:

<Root a="1"> 
    <I aa="1" b="2"> 
    <I aa=5" b="2"> 
    <I aa="3" b="2"> 
    <I aa="4" b="2"> 
</Root> 

Должно быть, как ->

<Root a="1"> 
     <I aa="1" b="2"> 
     <I aa=3" b="2"> 
     <I aa="4" b="2"> 
    <I aa="5" b="2"> 
</Root> 

Пожалуйста, помогите.

+0

Я думаю, что это дублирование к этому [должности] (http://stackoverflow.com/questions/4604100/how-to-sort-xml-document- in-linq-by-an-attribute-value? rq = 1) – Dong

+0

«Тот, кто пытается захватить слишком много, не получит ничего». (он связан с моим удаленным сообщением) – xanatos

ответ

7

Для сортировки использовать следующее:

var xml= xDoc.Element("Root") 
       .Elements("I") 
       .OrderByDescending(s => (int) s.Attribute("aa")); 

Тогда, чтобы сохранить его:

XDocument doc = new XDocument(new XElement("Root", xml)); 
doc.Save("C:\\Something.xml"); 

UPDATE

Вы можете использовать XSLT для этого:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/*"> 
     <xsl:copy> 
      <xsl:for-each select="I"> 
          <xsl:sort select="@aa" order="ascending"/> 
        <xsl:copy-of select="."/> 
      </xsl:for-each> 
     </xsl:copy> 
    </xsl:template> 
</xsl:stylesheet> 

И ссылаться на него (цитирует How to apply an XSLT Stylesheet in C#):

XPathDocument myXPathDoc = new XPathDocument(myXmlFile) ; 
XslTransform myXslTrans = new XslTransform() ; 
myXslTrans.Load(myStyleSheet); 
XmlTextWriter myWriter = new XmlTextWriter("result.xml",null) ; 
myXslTrans.Transform(myXPathDoc,null,myWriter) ; 
+0

Garath: Я упомянул в сообщении, что я не могу использовать linq. Ответьте на другие ответы. Спасибо – user2711884

+0

Разрешено ли XSLT? Это в .NET 2.0 –

Смежные вопросы