我知道沒有直接的方法,但仍然可以。 我們可以將XElement
元素轉換爲XmlNode
。 選項如InnerText
和InnerXml
分別是XmlNode
。將XElement轉換爲XmlNode
所以,如果我想要使用這些選項,可以做些什麼來將XElement
轉換爲XmlNode
,反之亦然。
我知道沒有直接的方法,但仍然可以。 我們可以將XElement
元素轉換爲XmlNode
。 選項如InnerText
和InnerXml
分別是XmlNode
。將XElement轉換爲XmlNode
所以,如果我想要使用這些選項,可以做些什麼來將XElement
轉換爲XmlNode
,反之亦然。
這裏是從字符串轉換的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 InnerXml - 見Best way to get InnerXml of an XElement?
我用下面的擴展方法,他們似乎是相當普遍:
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-10-29 21:34:36
我必須使'ToXmlNode'返回'xmlDoc.DocumentElement'來獲得我期望的行爲。特別是,我的'XElement'有註釋,但是我的'XmlNode'沒有註釋。否則非常有幫助。 – tallseth 2014-02-21 14:03:07
'return xmlDoc;'應該被修正爲'return xmlDoc.FirstChild;' – 2017-09-04 07:01:41
基於BrokenGlass的answer,如果你希望將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);
}
}
}
注意:如果您嘗試在文檔中插入由不同文檔創建的節點,則會引發異常:「要插入的節點來自不同的文檔集XT「。
我想在最短的方式如下:
Dim xn as XmlNode = xdoc.ReadNode(xElem.CreateReader)
這就是所有!
你也可以使用ImportNode https://msdn.microsoft.com/en-us/library/system.xml.xmldocument.importnode(v=vs.110).aspx – seabass 2018-03-07 13:23:30