我想制作一个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); }
看起来像ToString和重新分析方法是最好的方法.这是代码:
XElement copy = XElement.Parse(original.ToString());