首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何对LINQ to XML中的元素进行深度复制?

如何对LINQ to XML中的元素进行深度复制?
EN

Stack Overflow用户
提问于 2008-10-16 17:52:02
回答 4查看 22.7K关注 0票数 82

我想做一个LINQ to XML XElement的深度副本。我之所以要这样做,是因为我想(在同一文档中)创建文档中某些节点的修改副本。我看不出有什么方法可以做到这一点。

我可以将元素转换为XML字符串,然后重新解析它,但我想知道是否有更好的方法。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-12-10 15:35:21

不需要重新解析。XElement的一个构造器获取另一个XElement并对其进行深度复制:

代码语言:javascript
复制
XElement original = new XElement("original");
XElement deepCopy = new XElement(original);

这里有几个单元测试来演示:

代码语言:javascript
复制
[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);
}
票数 148
EN

Stack Overflow用户

发布于 2008-10-16 18:17:42

看起来ToString和reparse方法是最好的方法。代码如下:

代码语言:javascript
复制
XElement copy = XElement.Parse(original.ToString());
票数 9
EN

Stack Overflow用户

发布于 2008-10-17 14:00:47

直接从C# 3.0 in a Nutshell升级

当节点或属性被添加到元素中时(无论是通过函数构造还是Add方法),节点或属性的Parent属性都被设置为该元素。一个节点只能有一个父元素:如果您将一个已成为父元素的节点添加到第二个父元素中,则该节点将自动被深度克隆。在以下示例中,每个客户都有一个单独的地址副本:

代码语言:javascript
复制
var address = new XElement ("address",
                  new XElement ("street", "Lawley St"),
                  new XElement ("town", "North Beach")
              );
var customer1 = new XElement ("customer1", address);
var customer2 = new XElement ("customer2", address);

customer1.Element ("address").Element ("street").Value = "Another St";
Console.WriteLine (
  customer2.Element ("address").Element ("street").Value);   // Lawley St

这种自动复制使X-DOM对象实例化没有副作用--这是函数式编程的另一个特点。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/209595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档