我想交换两个 xml 元素。我该怎么做呢?这是代码。我尝试了解决方案here https://stackoverflow.com/questions/3695806/linq-to-xml-what-is-the-most-effective-way-to-move-nodes-up-and-down但它毕竟对我不起作用。我想交换这两个元素。当我运行程序时,元素不会交换,但是当我调用 ToList() 时,它会在列表中交换,但不会在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 http://msdn.microsoft.com/en-us/library/system.xml.linq.xelement.replacewith.aspx我相信这就是你所追求的。这是一个简短但完整的程序来演示它:
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
and element4
.
请注意,这是有效的,因为第一个x.ReplaceWith(y)
实际上创建了一个copy of y
,将原来的留在现有位置...准备替换为x
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)