Как добавить дочерний элемент в XElement в виде декодированной строки?

Я хочу пройти этот тест. Что я должен использовать вместо метода Add?

[TestMethod]
public void AddContentWithoutEncoding()
{
   var element = new XElement("Parent");

   element.Add("<Son>5</Son>");

   Assert.IsTrue(element.ToString() == "<Parent><Son>5</Son></Parent>");
}

С текущим подходом element.ToString() = "<Parent>&lt;Son&gt;5&lt;/Son&gt;</Parent>" это, очевидно, кодирование содержимого тега.

У меня есть большая постоянная строка с тегами, которую мне нужно добавить в XElement (потому что я использую ее в дальнейшем). И хотите использовать какое-то умное решение, чем HttpUtility.HtmlDecode - просто добавьте декодированную строку, а не декодируйте весь результат после добавления.

Спасибо!


person Dmitry Khryukin    schedule 16.07.2012    source источник


Ответы (2)


Пытаться,

var element = new XElement("Parent");
foreach(string xml in list)
    element.Add(XElement.Parse(xml));

Вероятно, вы также хотите в своем Assert...

Assert.IsTrue(element.ToString(SaveOptions.DisableFormatting) == ...
person Chuck Savage    schedule 16.07.2012
comment
:) это очевидно. Я не хочу использовать этот подход, потому что мне нужно добавить множество постоянных тегов (~ 100), и я не хочу создавать XElement для всех них. - person Dmitry Khryukin; 17.07.2012
comment
Приведите пример своих строк/массива, чтобы нам было с чем работать. - person Chuck Savage; 17.07.2012
comment
Если у вас есть список/массив строковых тегов, я скорректировал свой ответ, который может вам подойти. - person Chuck Savage; 17.07.2012
comment
Представьте себе строку вида ‹Tag1/›‹Tag2›40‹/Tag2›‹Tag3›‹Tag4›...‹Son56›345‹Son56› ...‹Tag4›‹/3Tag›….‹Tag100›.. ..‹/Tag100› с разными уровнями наследования - person Dmitry Khryukin; 17.07.2012
comment
У меня есть просто строка с элементами, а не элементами. - person Dmitry Khryukin; 17.07.2012
comment
@BurundukXP XElement.Parse — это лучший способ преобразовать строку в представление XElement, чтобы вы могли добавить ее в существующий XElement, преобразовать в строку и позже прочитать как набор XElements. Вы можете добавлять строки с разметкой к элементам с помощью element.WriteCData, но при последующем анализе они будут считаны как содержимое элемента, а не преобразованы в XElements. - person Monroe Thomas; 17.07.2012
comment
@MonroeThomas хорошо. спасибо, меня немного беспокоит скорость этого подхода - проверим. - person Dmitry Khryukin; 17.07.2012

Вы можете сделать XElement.Parse, а затем добавить вот так:

var element = new XElement("Parent");

element.Add(XElement.Parse("<Sone>5</Sone>"));

Console.WriteLine(element.ToString(SaveOptions.DisableFormatting));

Это дает мне результат, который вы ищете.

person Davin Tryon    schedule 16.07.2012
comment
Является ли Parse лучше, чем декодирование результата? - person Dmitry Khryukin; 17.07.2012
comment
@ChuckSavage добавить дочерний тег, как в вопросе, а затем декодировать результат - HttpUtility.HtmlDecode(element.ToString()) - person Dmitry Khryukin; 17.07.2012