Converting XElement into XmlNode
I use the following extension methods, they seem to be quite common:
public static class MyExtensions{ public static XElement ToXElement(this XmlNode node) { XDocument xDoc = new XDocument(); using (XmlWriter xmlWriter = xDoc.CreateWriter()) node.WriteTo(xmlWriter); return xDoc.Root; } public static XmlNode ToXmlNode(this XElement element) { using (XmlReader xmlReader = element.CreateReader()) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlReader); return xmlDoc; } }}
Here is converting from string to XElement to XmlNode and back to XElement. ToString() on XElement is similar to OuterXml on XmlNode.
XElement xE = XElement.Parse("<Outer><Inner><Data /></Inner></Outer>"); XmlDocument xD = new XmlDocument(); xD.LoadXml(xE.ToString()); XmlNode xN = xD.FirstChild; XElement xE2 = XElement.Parse(xN.OuterXml);
Based on BrokenGlass's answer, if you wish to embed the XmlNode to an XmlDocument, than use:
public static class MyExtensions{ public static XmlNode ToXmlNode(this XElement element, XmlDocument xmlDoc = null) { using (XmlReader xmlReader = element.CreateReader()) { if(xmlDoc==null) xmlDoc = new XmlDocument(); return xmlDoc.ReadNode(xmlReader); } }}
Note: if you try to insert into a document a node, that is created by a different document, than it will throw an exception: "The node to be inserted is from a different document context."