Converting XElement into XmlNode

前端 未结 6 1487
逝去的感伤
逝去的感伤 2021-02-12 06:56

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

相关标签:
6条回答
  • 2021-02-12 07:22

    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:28

    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)
  • 2021-02-12 07:33

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

    0 讨论(0)
  • 2021-02-12 07:34
    XElement xelement = GetXElement();
    XmlNode node = new XmlDocument().ReadNode(xelement.CreateReader()) as XmlNode;
    
    0 讨论(0)
  • 2021-02-12 07:35

    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:46

    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)
提交回复
热议问题