diff --git a/src/Umbraco.Core/XmlExtensions.cs b/src/Umbraco.Core/XmlExtensions.cs index b81785eb7e..e2518c791a 100644 --- a/src/Umbraco.Core/XmlExtensions.cs +++ b/src/Umbraco.Core/XmlExtensions.cs @@ -300,21 +300,17 @@ namespace Umbraco.Core public static XmlNode GetXmlNode(this XContainer element) { - using (XmlReader xmlReader = element.CreateReader()) + using (var xmlReader = element.CreateReader()) { - XmlDocument xmlDoc = new XmlDocument(); + var xmlDoc = new XmlDocument(); xmlDoc.Load(xmlReader); - return xmlDoc.FirstChild; + return xmlDoc.DocumentElement; } } public static XmlNode GetXmlNode(this XContainer element, XmlDocument xmlDoc) { - using (XmlReader xmlReader = element.CreateReader()) - { - xmlDoc.Load(xmlReader); - return xmlDoc.DocumentElement; - } + return xmlDoc.ImportNode(element.GetXmlNode(), true); } // this exists because diff --git a/src/Umbraco.Tests/XmlExtensionsTests.cs b/src/Umbraco.Tests/XmlExtensionsTests.cs index 8cd934effc..bc4a281b66 100644 --- a/src/Umbraco.Tests/XmlExtensionsTests.cs +++ b/src/Umbraco.Tests/XmlExtensionsTests.cs @@ -29,5 +29,20 @@ namespace Umbraco.Tests Assert.AreEqual(xmlNode.InnerText, "hello world"); } + + [Test] + public void ToXmlNodeIsNonDestructive() + { + const string xml = "helloworld"; + + var cdata = new XElement("test", new XText("hello world")); + var xdoc = new XmlDocument(); + xdoc.LoadXml(xml); + + var xmlNode = cdata.GetXmlNode(xdoc); + + Assert.AreEqual(xmlNode.InnerText, "hello world"); + Assert.AreEqual(xml, xdoc.OuterXml); + } } } \ No newline at end of file