直接的な方法はありませんが、それでも..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;
}
}
}
これは、文字列から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);
}
}
}
注:別のドキュメントによって作成されたノードをドキュメントに挿入しようとすると、「挿入されるノードは別のドキュメントコンテキストからのものです」という例外がスローされます。
最短の方法は次のとおりです。
Dim xn as XmlNode = xdoc.ReadNode(xElem.CreateReader)
それで全部です!C#への変換は簡単です。
XElement xelement = GetXElement();
XmlNode node = new XmlDocument().ReadNode(xelement.CreateReader()) as XmlNode;