将XElement转换为XmlNode

San*_*ile 23 c# xml linq xelement xmlnode

我知道没有直接的方法,但仍然..我们可以将XElement元素转换为XmlNode.类似的选项InnerText,并InnerXmlXmlNode具体的.

所以,如果我想使用这些选项,可以做什么来转换 XElementXmlNode反之亦然.

Bro*_*ass 52

我使用以下扩展方法,它们似乎很常见:

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我不得不让`ToXmlNode`返回`xmlDoc.DocumentElement`以获得我期望的行为.特别是,我的`XElement`有注释,但我的`XmlNode`没有.否则很有帮助. (3认同)

Wes*_*ant 26

这里是从字符串到XElement转换为XmlNode并返回到XElement.XElement上的ToString()类似于XmlNode上的OuterXml.

    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); 
Run Code Online (Sandbox Code Playgroud)