Converting XElement into XmlNode Converting XElement into XmlNode xml xml

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."