如何将XmlNode转换为XElement?

Ale*_*mov 24 .net c# linq linq-to-xml

我有一个旧XmlNode的代码.但解决当前任务的最简单方法是使用XElementLINQ-to-XML.唯一的问题是在.NET Framework中没有直接或明显的方法将a转换XmlNode为a XElement.

所以对于初学者,我想实现一个接收XmlNode实例并将其转换为XElement实例的方法.

我该如何实现这种转换?

EZI*_*EZI 18

var xElem = XElement.Load( xmlElement.CreateNavigator().ReadSubtree() );
Run Code Online (Sandbox Code Playgroud)

xmlElement.InnerXml在其他答案中使用有两个问题,

1-您将松开元素(当然,它可以轻松处理)

XmlDocument doc = new XmlDocument();
doc.LoadXml("<root> <sub>aaa</sub> </root>");
var xElem1 = XElement.Load(doc.DocumentElement.CreateNavigator().ReadSubtree());
var xElem2 = XElement.Parse(doc.DocumentElement.InnerXml);
Run Code Online (Sandbox Code Playgroud)

xElem2将是<sub>aaa</sub>,没有(root)

2-如果xml包含文本节点,则会出现异常

XmlDocument doc = new XmlDocument();
doc.LoadXml("<root> text <sub>aaa</sub> </root>");
var xElem1 = XElement.Load(doc.DocumentElement.CreateNavigator().ReadSubtree());
var xElem2 = XElement.Parse(doc.DocumentElement.InnerXml); //<-- XmlException
Run Code Online (Sandbox Code Playgroud)

  • 对于那些使用这种方法的人,请确保所有`XmlNode`s的`NodeType`是`Element`. (2认同)

Sel*_*enç 5

您可以尝试使用InnerXml属性of XmlElement来获取元素的xml内容,然后将其解析为XElementusing XElement.Parse

public static XElement ToXELement(this XmlElement source)
{
    return XElement.Parse(source.InnerXml);
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么不使用OuterXml代替InnerXml? (3认同)