Conversion de XElement en XmlNode

je sais il n'existe pas de méthode directe pour le faire, mais encore.. Pouvons-nous convertir l'élément XElement en XmlNode . Les Options comme InnerText et InnerXml sont spécifiques à XmlNode .

donc,si je veux utiliser ces options, ce qui peut être fait pour convertir XElement en XmlNode et vice-versa.

23
demandé sur Sangram Nandkhile 2011-03-22 13:02:31

5 réponses

voici la conversion de string en XElement en XmlNode et retour à XElement. ToString () sur XElement est similaire à OuterXml sur XmlNode.

    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); 
25
répondu Wes Grant 2011-03-23 00:29:27

j'utilise la suite des méthodes d'extension, ils semblent être tout à fait commun:

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;
        }
    }
}
50
répondu BrokenGlass 2011-03-23 00:58:00

basé sur de BrokenGlass "réponse , si vous souhaitez intégrer le code Xmln à un document XML, que d'utiliser:

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

Note: Si vous essayez d'insérer dans un document un noeud, qui est créé par un document différent, qu'il lancera une exception: "le noeud à insérer provient d'un contexte de document différent."

3
répondu jaraics 2017-05-23 12:10:27

je pense que le chemin le plus court est le suivant:

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

C'est tout!

2
répondu Aave 2016-12-30 07:42:22

Il y a des façons d'obtenir de l'InnerXml de XElement - voir la Meilleure façon d'obtenir InnerXml d'un XElement?

1
répondu Stuart 2017-05-23 12:34:41