XDocumentを使ってXMLの順番を入れ替えたい
<root>
<one>1</one>
<two>2</two>
</root>
2 が 1 の前に表示されるように順序を変更したいのですが、この機能は組み込まれているのでしょうか、それとも自分でやらなければなりませんか。たとえば、削除してから AddBeforeSelf()?
ありがとう
XDocumentを使ってXMLの順番を入れ替えたい
<root>
<one>1</one>
<two>2</two>
</root>
2 が 1 の前に表示されるように順序を変更したいのですが、この機能は組み込まれているのでしょうか、それとも自分でやらなければなりませんか。たとえば、削除してから AddBeforeSelf()?
ありがとう
この解決策を試してください...
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();
}
これでうまくいくはずです。コンテンツに基づいてルートの子ノードを並べ替えてから、ドキュメント内での順序を変更します。これはおそらく最も効果的な方法ではありませんが、タグから判断すると、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();
}
これを実現するために C# コードを記述する以外に、XSLT を使用して XML を変換できます。