2009-06-24 7 views
0

私は以下のループとC#のXMLライターを使用して作成しているxmlドキュメントを持っています。現在はうまくいきますが、XMLを書き込むたびに、自動的にdriveStartフィールドを使用して昇順にソートするソリューションを実装したいと考えていました。人々はあなたがXSLTでこれを行う必要があると言いますが、私はそれに従う良い例を見つけるのに苦労しています。誰でも私が使うことができるこの経験がありますか?どんな助けでも大いに感謝しています。書き込む前にC#でXMLをソートする

XmlDocument doc = new XmlDocument(); 
XmlElement rn = doc.CreateElement("DriveLayout"); 
XmlElement dn = null; 
XmlAttribute xa, xa1, xa2, xa3, xa4, xa5, xa6; 
doc.AppendChild(rn); 

foreach (GridItem item in this.fileSystemGrid.Items) 
{ 
    dn = doc.CreateElement("Drive"); 
    xa = doc.CreateAttribute("driveTime"); 
    xa.Value = item["DriveTime"].ToString(); 
    xa1 = doc.CreateAttribute("driveStart"); 
    xa1.Value = item["DriveStart"].ToString(); 
    xa2 = doc.CreateAttribute("driveEnd"); 
    xa2.Value = item["DriveEnd"].ToString(); 
} 

dn.SetAttributeNode(xa); 
dn.SetAttributeNode(xa1); 
dn.SetAttributeNode(xa2); 
rn.AppendChild(dn); 

return doc.InnerXml; 

答えて

3

xmlライターを使用する前に、DriveStartでコレクションをソートしてください。

+0

私はC#を初めて使っています。 item.Sort =の行に沿った何か? – Splashlin

+0

これについてあなたのチームの上級開発者と話し合うべきです。とりわけ、グリッドにバインドされているデータからデータを取り出すのではなく、グリッド自体からデータを取り出すことが少し奇妙です。次の質問は、使用しているVisual Studioのバージョンです。 –

+0

私はグリッドコレクションをソートする方法を見つけることができないようです。私はgridviewなどを行う方法を見ていますが、グリッドコレクション全体ではありません。 – Splashlin

0

なぜソートしますか?どのように使用されますか?通常、XMLは単なるデータであり、見栄えを良くするためにソートされていません。

+0

xmlは、後で別のプログラムで使用するために解析されます。問題は、この特定のプログラムを実行すると、最小から最大まで順番に行かなければならないということです。したがって、書かれる前にXMLを並べ替えることで、他のプログラムが正しく仕事をすることができます。 – Splashlin

+0

これは本当に他のプログラムの仕事です。それ以外の場合、DriveStartに加えてDriveEndをソートするなどの要件を変更すると、コードを変更する必要があります。あなたのコードは、他のプログラムがどのようにデータをソートするかを実際に知るべきではありません。 –

1

私はなぜあなたがしないのだろうかあなたのXMLはソートされた方法で最初からビルドされています。これは、特にXSLの初心者だと思われるので、より簡単で効率的になります。とにかく

、あなたのXMLを想定し、それの楽し—は、次のようになりますのために:あなたはXslCompiledTransformを使用する.NETでは

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="DriveLayout"> 
    <xsl:copy> 
     <xsl:apply-templates select="Drive"> 
     <xsl:sort select="@driveTime" /> 
     </xsl:apply-templates> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Drive"> 
    <xsl:copy> 
     <xsl:copy-of select="@*"/> 
    </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

<DriveLayout> 
    <Drive driveTime="somevalue" driveStart="somevalue" driveEnd="somevalue" /> 
    <Drive driveTime="somevalue" driveStart="somevalue" driveEnd="somevalue" /> 
    <Drive driveTime="somevalue" driveStart="somevalue" driveEnd="somevalue" /> 
</DriveLayout> 

次に、このXSLT 1.0スタイルシートを取るソートクラスを使用してドキュメントに変更を加えます。リンクされたMSDNページには、開始するのに十分な資料があります。

関連する問題