3

私は自分の問題の解決策を見つけようとしましたが、この分野(Linq、XML)に関する私の知識はかなり限られています。:('似たような構造を見つけましたが、少し複雑な並べ替え方法が必要です。

次のXMLドキュメントについて考えてみます。

<Envelope>
    <Body>
        <Table>
            <Trans>
                <B>1</B>
                <A>3</A>
                <C>5</C>
            </Trans>
            <Trans>
                <D>1</D>
                <A>6</A>
                <C>3</C>
            </Trans>
            <Trans>
                <A>1</A>
                <C>3</C>
                <B>5</B>
            </Trans>
        </Table>
    </Body>
<Envelope>

C#/ Linqを使用して<Trans>内の要素を並べ替える方法はありますか、それともすべての<Trans>要素を分割して1つずつ並べ替える必要がありますか?

更新 私はファイルを持っています、そしてこれは私が達成しようとしていることです。;)

<Envelope>
    <Body>
       <Table>
           <Trans>
               <A>3</A>
               <B>1</B>
               <C>5</C>
           </Trans>
           <Trans>
               <A>6</A>
               <C>3</C>
               <D>1</D>
           </Trans>
           <Trans>
               <A>1</A>
               <B>5</B>
               <C>3</C>
           </Trans>
       </Table>
   </Body>
<Envelope>
4

2 に答える 2

3

それは本当にあなたが何をしたいのか(それらを順番に処理するのか、それともXMLを並べ替えるのか?)と正確に何を意味するのか(タグ名で並べ替える?値で並べ替える?)に依存します。

それらを順番に処理したい場合は、次のようにして、それぞれの内部のすべての要素を<Trans>値(<D>1</D><A>6</A>)で並べ替えることができます。

XDocument doc = /* load up your XML */

var sorted = from trans in doc.Descendants("Trans")
             select trans.Children().OrderBy(c => int.Parse(c.Value)).ToArray();

<A>6</A>または、タグ名(前<D>1</D>)で注文する方法は次のとおりです。

var sorted = from trans in doc.Descendants("Trans")
             select trans.Children().OrderBy(c => c.Name.LocalName).ToArray();

上記で、sorted配列の列挙可能なコレクションになります。コレクション内の各配列はを表し、<Trans>そのような各配列はの子を<Trans>順番に保持します。

于 2012-06-20T10:05:56.463 に答える
2
XDocument xDoc = XDocument.Load(....);
foreach(var trans in xDoc.Descendants("Trans"))
{
    trans.ReplaceAll( trans.Elements().OrderBy(x=>x.Name.LocalName));
}

string newXml = xDoc.ToString();
于 2012-06-20T10:08:46.740 に答える