C# 将XElement转换为XmlNode
我知道没有直接的方法,但是。。 我们可以将C# 将XElement转换为XmlNode,c#,xml,linq,xelement,xmlnode,C#,Xml,Linq,Xelement,Xmlnode,我知道没有直接的方法,但是。。 我们可以将XElement元素转换为XmlNode。 像InnerText和InnerXml这样的选项是特定于XmlNode的 因此,如果我想使用这些选项,可以做些什么来将XElement转换为XmlNode,反之亦然。有一些方法可以从XElement获取InnerXml-请参见这里的从字符串到XElement再到XmlNode再到XElement的转换。XElement上的ToString()类似于XmlNode上的OuterXml XElement x
XElement
元素转换为XmlNode
。
像InnerText
和InnerXml
这样的选项是特定于XmlNode
的
因此,如果我想使用这些选项,可以做些什么来将
XElement
转换为XmlNode
,反之亦然。有一些方法可以从XElement获取InnerXml-请参见这里的从字符串到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);
XElement xE=XElement.Parse(“”);
XmlDocument xD=新的XmlDocument();
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);
}
}
}
注意:如果您尝试在文档中插入一个由不同文档创建的节点,则会引发异常:“要插入的节点来自不同的文档上下文。”我认为最短的方法是:
Dim xn as XmlNode = xdoc.ReadNode(xElem.CreateReader)
就这些!转换为C#很简单。awesome:)这是一个很大的帮助,我必须做出
ToXmlNode
returnxmlDoc.DocumentElement
来获得我期望的行为。特别是,我的XElement
有注释,但我的XmlNode
没有注释。否则非常有用。返回xmlDoc
应更正为返回xmlDoc.FirstChild代码>也可以使用ImportNode
XElement xelement = GetXElement();
XmlNode node = new XmlDocument().ReadNode(xelement.CreateReader()) as XmlNode;