我知道没有直接的方法可以做到,但是...
我们能够将XElement
元素转换为XmlNode
吗?
像InnerText
和InnerXml
这样的选项是特定于XmlNode
的。
所以,如果我想要使用这些选项,该怎么办才能将XElement
转换为XmlNode
,反之亦然。
我使用以下扩展方法,它们似乎相当常见:
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;
}
}
}
ToXmlNode
返回xmlDoc.DocumentElement
。特别地,我的XElement
有注释,但我的XmlNode
没有。除此之外非常有帮助。 - tallsethreturn xmlDoc;
should be corrected as return xmlDoc.FirstChild;
- Ken Kin这里将字符串转换为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);
根据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);
}
}
}
XElement xelement = GetXElement();
XmlNode node = new XmlDocument().ReadNode(xelement.CreateReader()) as XmlNode;
我认为最简单的方法是按照以下步骤进行:
Dim xn as XmlNode = xdoc.ReadNode(xElem.CreateReader)
就这样!转换为C#很容易。