Question

Comment ajouter une chaîne XML existante dans un XElement?

Ce code

        var doc = new XDocument(
            new XElement("results", "<result>...</result>")
        );

bien sûr produit cette

  <results>&lt;result&gt;&lt;/result&gt;</results>

mais j'ai besoin de ça

  <results><result>...</result></results>

Des idées?

Était-ce utile?

La solution

Cela devrait fonctionner:

var xmlString = "<result>sometext</result>";
var xDoc = new XDocument(new XElement("results", XElement.Parse(xmlString)));

Autres conseils

La réponse de Sani Singh Huttunen m'a mis sur la bonne voie, mais il ne permet qu'un élément result dans l'élément result .

var xmlString = "<result>sometext</result><result>alsotext</result>";

échoue avec l'exception System.Xml.XmlException

  

Il existe plusieurs éléments racines.

J'ai résolu ce problème en déplaçant l'élément résultats dans le littéral chaîne

.
var xmlString = "<results><result>sometext</result><result>alsotext</result></results>";

pour qu'il ne comporte qu'un seul élément racine, puis ajoute la chaîne analysée directement à l'élément parent, comme suit:

parent.Add(XElement.Parse(xmlString));

Voir ma réponse sur existe-t-il un équivalent XElement? vers XmlWriter.WriteRaw?

Essentiellement, remplacez un espace réservé pour le contenu uniquement si vous savez que le code XML est déjà valide .

var d = new XElement(root, XML_PLACEHOLDER);
var s = d.ToString().Replace(XML_PLACEHOLDER, child);

Cette méthode peut également être plus rapide que son analyse avec XElement.Parse .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top