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>&lt;result&gt;&lt;/result&gt;</results>

pero necesito esto

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

¿Alguna idea?

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top