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

ma ne ho bisogno

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

Qualche idea?

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top