如何对LINQtoXML中的元素进行深度复制?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

我想要制作一个LINQtoXMLXElement的。我之所以要这样做,是因为文档中有一些节点,我想要创建修改后的副本(在同一个文档中)。我看不出有什么方法能做到这一点。

我可以将元素转换为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和Response方法是最好的方法。以下是代码:

XElement copy = XElement.Parse(original.ToString());

扫码关注云+社区

领取腾讯云代金券