8

XDocumentを使ってXMLの順番を入れ替えたい

<root>
  <one>1</one>
  <two>2</two>
</root>

2 が 1 の前に表示されるように順序を変更したいのですが、この機能は組み込まれているのでしょうか、それとも自分でやらなければなりませんか。たとえば、削除してから AddBeforeSelf()?

ありがとう

4

4 に答える 4

2

この解決策を試してください...

XElement node = ...get the element...

//Move up
if (node.PreviousNode != null) {
    node.PreviousNode.AddBeforeSelf(node);
    node.Remove();
}

//Move down
if (node.NextNode != null) {
    node.NextNode.AddAfterSelf(node);
    node.Remove();
}
于 2010-10-15T10:33:25.093 に答える
1

これでうまくいくはずです。コンテンツに基づいてルートの子ノードを並べ替えてから、ドキュメント内での順序を変更します。これはおそらく最も効果的な方法ではありませんが、タグから判断すると、LINQ で見たかったのです。

static void Main(string[] args)
{
    XDocument doc = new XDocument(
        new XElement("root",
            new XElement("one", 1),
            new XElement("two", 2)
            ));

    var results = from XElement el in doc.Element("root").Descendants()
                  orderby el.Value descending
                  select el;

    foreach (var item in results)
        Console.WriteLine(item);

    doc.Root.ReplaceAll( results.ToArray());

    Console.WriteLine(doc);

    Console.ReadKey();
}
于 2008-10-22T02:39:01.963 に答える
1

これを実現するために C# コードを記述する以外に、XSLT を使用して XML を変換できます。

于 2008-11-24T18:07:55.850 に答える