Cómo agregar una cadena Xml existente en un XElement
Pregunta
¿Cómo agregar una cadena Xml existente en un XElement?
Este código
var doc = new XDocument(
new XElement("results", "<result>...</result>")
);
por supuesto produce esto
<results><result></result></results>
pero necesito esto
<results><result>...</result></results>
¿Alguna idea?
Solución
Esto debería funcionar:
var xmlString = "<result>sometext</result>";
var xDoc = new XDocument(new XElement("results", XElement.Parse(xmlString)));
Otros consejos
La respuesta de Sani Singh Huttunen me puso en el camino correcto, pero solo permite un elemento result en el elemento results .
var xmlString = "<result>sometext</result><result>alsotext</result>";
falla con la excepción System.Xml.XmlException
Hay múltiples elementos raíz.
Resolví esto moviendo el elemento resultados al literal de cadena
var xmlString = "<results><result>sometext</result><result>alsotext</result></results>";
para que solo tuviera un elemento raíz y luego agregara la cadena analizada directamente al elemento padre, de esta manera:
parent.Add(XElement.Parse(xmlString));
Vea mi respuesta en ¿Hay un equivalente de XElement? a XmlWriter.WriteRaw?
Esencialmente, reemplace un marcador de posición para el contenido solo si sabe que ya es XML válido .
var d = new XElement(root, XML_PLACEHOLDER);
var s = d.ToString().Replace(XML_PLACEHOLDER, child);
Este método también puede ser más rápido que analizarlo con XElement.Parse
.