Comment ajouter une chaîne XML existante dans un XElement
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><result></result></results>
mais j'ai besoin de ça
<results><result>...</result></results>
Des idées?
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
.