当前位置:  开发笔记 > Android > 正文

如何在LINQ to XML中对元素进行深层复制?

如何解决《如何在LINQtoXML中对元素进行深层复制?》经验,为你挑选了2个好方法。

我想制作一个LINQ to XML XElement的深层副本.我想这样做的原因是文档中有一些节点我想创建(在同一文档中)的修改副本.我没有看到这样做的方法.

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



1> Jonathan Mof..:

没有必要重新解析.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);
}


我相信这个例子中使用的构造函数通常称为**复制构造函数**.这是[`XElement` Copy Constructor]的文档(http://msdn.microsoft.com/en-us/library/bb297950%28v=vs.110%29.aspx).还有一个[`XDocument` Copy Constructor](http://msdn.microsoft.com/en-us/library/bb341301%28v=vs.110%29.aspx).对我们来说幸运的是,**LINQ to XML**使这很容易...... [深度复制(或克隆)](http://stackoverflow.com/questions/78536/deep-cloning-objects-in-c -sharp)可以多次不那么直截了当.

2> Daniel Plais..:

看起来像ToString和重新分析方法是最好的方法.这是代码:

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

推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有