Come aggiungere una stringa Xml esistente in un XElement
Domanda
Come aggiungere una stringa Xml esistente in un XElement?
Questo codice
var doc = new XDocument(
new XElement("results", "<result>...</result>")
);
ovviamente produce questo
<results><result></result></results>
ma ne ho bisogno
<results><result>...</result></results>
Qualche idea?
Soluzione
Questo dovrebbe funzionare:
var xmlString = "<result>sometext</result>";
var xDoc = new XDocument(new XElement("results", XElement.Parse(xmlString)));
Altri suggerimenti
La risposta di Sani Singh Huttunen mi ha portato sulla strada giusta, ma consente solo un elemento risultato nell'elemento risultati .
var xmlString = "<result>sometext</result><result>alsotext</result>";
non riesce con System.Xml.XmlException
Esistono più elementi radice.
Ho risolto questo problema spostando l'elemento results nella stringa letterale
var xmlString = "<results><result>sometext</result><result>alsotext</result></results>";
in modo che avesse un solo elemento radice e quindi aggiungesse la stringa analizzata direttamente all'elemento genitore, in questo modo:
parent.Add(XElement.Parse(xmlString));
Vedi la mia risposta su Esiste un equivalente XElement su XmlWriter.WriteRaw?
In sostanza, sostituisci un segnaposto per il contenuto solo se sai che è già un XML valido .
var d = new XElement(root, XML_PLACEHOLDER);
var s = d.ToString().Replace(XML_PLACEHOLDER, child);
Questo metodo potrebbe anche essere più veloce dell'analisi con XElement.Parse
.