25

直接的な方法はありませんが、それでも..XElement要素をに変換できますかXmlNodeInnerTextおよびのようなオプションInnerXmlXmlNode特定のものです。

XElementしたがって、これらのオプションを使用したい場合は、に変換するために何ができるか、 XmlNodeまたはその逆を行うことができます。

4

5 に答える 5

57

私は次の拡張メソッドを使用していますが、それらは非常に一般的であるようです。

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-03-23T00:58:00.337 に答える
27

これは、文字列から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); 
于 2011-03-23T00:29:27.247 に答える
3

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);
        }
    }
}

注:別のドキュメントによって作成されたノードをドキュメントに挿入しようとすると、「挿入されるノードは別のドキュメントコンテキストからのものです」という例外がスローされます。

于 2013-09-05T09:33:51.137 に答える
2

最短の方法は次のとおりです。

Dim xn as XmlNode = xdoc.ReadNode(xElem.CreateReader)

それで全部です!C#への変換は簡単です。

于 2016-12-30T07:42:22.097 に答える
2
XElement xelement = GetXElement();
XmlNode node = new XmlDocument().ReadNode(xelement.CreateReader()) as XmlNode;
于 2018-12-18T13:29:31.117 に答える