将XElement转换为XmlNode
我知道没有直接的方法,但仍然..我们可以将XElement
元素转换为XmlNode
。 InnerText
和InnerXml
等选项是特定InnerXml
XmlNode
。
所以,如果我想使用这些选项,可以做些什么来将XElement
转换为XmlNode
,反之亦然。
这里是从字符串到XElement转换为XmlNode并返回到XElement。 XElement上的ToString()类似于XmlNode上的OuterXml。
XElement xE = XElement.Parse(" "); XmlDocument xD = new XmlDocument(); xD.LoadXml(xE.ToString()); XmlNode xN = xD.FirstChild; XElement xE2 = XElement.Parse(xN.OuterXml);
我使用以下扩展方法,它们似乎很常见:
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; } } }
基于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); } } }
注意:如果您尝试将由其他文档创建的节点插入到文档中,而不是它将引发exception:“要插入的节点来自不同的文档上下文。”
我认为最简短的方法是:
Dim xn as XmlNode = xdoc.ReadNode(xElem.CreateReader)
就这样!
有办法从XElement获取InnerXml – 请参阅获取XElement的InnerXml的最佳方法?