Converting XElement into XmlNode

前端 未结 5 1938
死守一世寂寞
死守一世寂寞 2021-02-12 07:17

I know there is no direct method of doing it but still.. Can we convert XElement element into XmlNode. Options like InnerText and

相关标签:
5条回答
  • 2021-02-12 07:34

    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); 
    
    0 讨论(0)
  • 2021-02-12 07:37

    I think the shortest way is following:

    Dim xn as XmlNode = xdoc.ReadNode(xElem.CreateReader)
    

    That's all! Convert to C# is trivial.

    0 讨论(0)
  • 2021-02-12 07:44

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

    0 讨论(0)
  • 2021-02-12 07:45

    There are ways to get InnerXml from XElement - see Best way to get InnerXml of an XElement?

    0 讨论(0)
  • 2021-02-12 07:48

    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;
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题