2016-05-27 7 views
0

私は、次のようなタイプのSystem.Xml.XmlDocumentののXMLドキュメントをしました:私はオンラインさまざまなコードを試してみたが、それらのいずれでもない、それはC#でXmlDocumentの要素の子をソートする方法は?

<root> 

    <group> 
    <dog order="1" /> 
    <dog order="2" /> 
    <cat order="3" /> 
    <cat order="4" /> 
    <dog order="5" /> 
    <cat order="6" /> 
    <dog order="7" /> 
    </group> 

    <other/> 

</root> 

のようになりたい

<root> 

    <group> 
    <dog order="1" /> 
    <cat order="4" /> 
    <cat order="3" /> 
    <dog order="7" /> 
    <dog order="5" /> 
    <cat order="6" /> 
    <dog order="2" /> 
    </group> 

    <other/> 

</root> 

私のために働く。また、私のXmlDocumentをXDocumentに変換して、LINQで以下のように動作させました。

まだ成功していません。

私はグループ要素内の子供のXmlDocument

答えて

1

オプションは、要素を削除することですOneとソート後にそれらを再度追加してください。

XDocument doc = XDocument.Load(filename); 
var elements = doc.Root.Element("group").Elements().ToList(); // Copy the elements. 

doc.Root.Element("group").RemoveAll();       // Remove the elements from the document. 
doc.Root.Element("group").Add(elements.OrderBy(x=>int.Parse(x.Attribute("order").Value))); 
//Add them again after sorting. 

チェックこのDemo

出力

<root> 
    <group> 
    <dog order="1" /> 
    <dog order="2" /> 
    <cat order="3" /> 
    <cat order="4" /> 
    <dog order="5" /> 
    <cat order="6" /> 
    <dog order="7" /> 
    </group> 
</root> 
+0

偉大な仲間。デモは完璧に機能しているようです。私はこのコードを使用します。すべての設定が完了したら、私はこの回答に印をつけます。あなたの応答を感謝します。 –

1

このXSLT試すソートする必要があります: -

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

をし、それを適用します::

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

私はあなたが答えた感謝しています。しかし、私は実際にこのコードが何をするのか分からないのですか?私はxDocでこのxmlを取得しました。その中のグループ要素をソートしてxDocに戻したいだけです。 –

+0

XSLTを適用するとXMLがソートされ、次に別のXMLを書き込む必要があります(これはソートされます) – DDave

+0

result.xmlを書きたくない場合はどうすればよいですか? –

関連する問題