[英]How to swap two XML elements in linq to xml
我想交換兩個xml元素。 我該怎么做呢? 這是代碼。 我在這里嘗試了該解決方案,但畢竟對我不起作用。 我想交換兩個要素。 當我運行程序時,元素沒有被交換,但是當我調用ToList()時,它在List中被交換,但是在doc變量中沒有被交換
<template id="12">
<tabs>
<tab>
<name>test1</name>
<description />
</tab>
<tab>
<name>test2</name>
<description />
</tab>
</tabs>
</template>
這是交換它們的代碼
var doc = XDocument.Parse(q.XMLtext);
var Current = doc.ElementOrDefault("template").ElementOrDefault("tabs").ElementsOrDefault("tab").Where(x => (string)x.Element("name") == name).FirstOrDefault();
var Previous = Current.PreviousNode as XElement;
var Next = Current.NextNode as XElement;
var CurrentName = (string)Current.ElementOrDefault("name");
var PreviousName = (string)Previous.ElementOrDefault("name");
var NextName = (string)Next.ElementOrDefault("name");
if (MoveDirection == (int)MoveType.Up)
{
doc.ElementOrDefault("template").ElementOrDefault("tabs").ElementsOrDefault("tab").Where(x => (string)x.Element("name") == CurrentName || (string)x.Element("name") == PreviousName).Reverse();
}
else
//doc.ElementOrDefault("template").ElementOrDefault("tabs").ElementsOrDefault("tab").Where(x => x == Current || x == Next).Take(2).Reverse();
q.XMLtext = doc.ToString();
context.SaveChanges();
恐怕我還沒有完全確定要交換的元素,但是我相信XElement.ReplaceWith
是您要的對象。 這是一個簡短但完整的程序來演示它:
using System;
using System.Xml.Linq;
class Program
{
static void Main()
{
string xml = @"
<root>
<element1/>
<element2/>
<element3/>
<element4/>
<element5/>
</root>";
XDocument doc = XDocument.Parse(xml);
XElement x = doc.Root.Element("element2");
XElement y = doc.Root.Element("element4");
x.ReplaceWith(y);
y.ReplaceWith(x);
Console.WriteLine(doc);
}
}
這將交換element2
和element4
。
請注意,這是x.ReplaceWith(y)
因為第一個x.ReplaceWith(y)
實際上創建了y
的副本 ,將原始副本保留在其現有位置...准備x.ReplaceWith(y)
x
替換。
.Reverse()
以相反的順序返回元素。 它不會交換它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.