Как добавить существующую строку XML в XElement - PullRequest
19 голосов
/ 12 сентября 2009

Как добавить существующую строку XML в XElement?

Этот код

        var doc = new XDocument(
            new XElement("results", "<result>...</result>")
        );

конечно производит это

  <results>&lt;result&gt;&lt;/result&gt;</results>

но мне нужно это

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

Есть идеи?

Ответы [ 3 ]

29 голосов
/ 12 сентября 2009

Это должно работать:

var xmlString = "<result>sometext</result>";
var xDoc = new XDocument(new XElement("results", XElement.Parse(xmlString)));
2 голосов
/ 16 декабря 2016

Ответ Сани Сингха Хаттунена поставил меня на правильный путь, но он допускает только один результат элемент в results элемент.

var xmlString = "<result>sometext</result><result>alsotext</result>";

завершается с ошибкой System.Xml.XmlException

Существует несколько корневых элементов.

Я решил эту проблему, переместив элемент results в строковый литерал

var xmlString = "<results><result>sometext</result><result>alsotext</result></results>";

чтобы у него был только один корневой элемент, а затем добавили проанализированную строку непосредственно в родительский элемент, например:

parent.Add(XElement.Parse(xmlString));
1 голос
/ 13 января 2014

См. Мой ответ на Существует ли XElement, эквивалентный XmlWriter.WriteRaw?

По сути, замените местозаполнитель для содержимого , только если вы знаете, что это уже допустимый XML .

var d = new XElement(root, XML_PLACEHOLDER);
var s = d.ToString().Replace(XML_PLACEHOLDER, child);

Этот метод также может быть быстрее синтаксического анализа с помощью XElement.Parse.

...