1. ホーム
  2. .net

[解決済み] LINQ to XMLで要素のディープコピーを行うにはどうすればよいですか?

2023-06-29 08:56:18

質問

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);
}