25

我知道没有直接的方法,但仍然..我们可以将XElement元素转换为XmlNode. InnerText和之类的选项InnerXmlXmlNode特定的。

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

4

5 回答 5

57

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

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;
        }
    }
}
于 2011-03-23T00:58:00.337 回答
27

这是从字符串转换为 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); 
于 2011-03-23T00:29:27.247 回答
3

根据 BrokenGlass 的回答,如果您希望将 XmlNode 嵌入到 XmlDocument 中,请使用:

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);
        }
    }
}

注意:如果您尝试将由不同文档创建的节点插入到文档中,则会引发异常:“要插入的节点来自不同的文档上下文。”

于 2013-09-05T09:33:51.137 回答
2
XElement xelement = GetXElement();
XmlNode node = new XmlDocument().ReadNode(xelement.CreateReader()) as XmlNode;
于 2018-12-18T13:29:31.117 回答
2

我认为最短的方法如下:

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

就这样!转换为 C# 很简单。

于 2016-12-30T07:42:22.097 回答