我想要制作 LINQ to XML XElement 的深拷贝。我想这样做的原因是文档中有一些节点我想创建修改后的副本(在同一文档中)。我没有找到执行此操作的方法。
我可以将元素转换为 XML 字符串,然后重新解析它,但我想知道是否有更好的方法。
请您参考如下方法:
无需重新解析。 XElement 的构造函数之一采用另一个 XElement 并对其进行深层复制:
XElement original = new XElement("original");
XElement deepCopy = new XElement(original);
以下是几个要演示的单元测试:
[TestMethod]
public void XElementShallowCopyShouldOnlyCopyReference()
{
XElement original = new XElement("original");
XElement shallowCopy = original;
shallowCopy.Name = "copy";
Assert.AreEqual("copy", original.Name);
}
[TestMethod]
public void ShouldGetXElementDeepCopyUsingConstructorArgument()
{
XElement original = new XElement("original");
XElement deepCopy = new XElement(original);
deepCopy.Name = "copy";
Assert.AreEqual("original", original.Name);
Assert.AreEqual("copy", deepCopy.Name);
}