Преобразование XElement в строку HTML - PullRequest
4 голосов
/ 29 июня 2010

Я выполняю операции XML над документом XHTML с использованием Xml и Linq.

При преобразовании его обратно в строку для вывода в браузер он отображает теги сценария в их исходной предоставленной форме при создании XElement как <script />.

Это препятствует правильной обработке большинства браузеров на рынке.

Я хотел бы выполнить преобразование XElement в String таким образом, чтобы он выводил тег сценария, подобный этому <script></script>

Может ли кто-нибудь помочь мне в этом? Заранее спасибо. :)

Первое редактирование Предоставляя дополнительную информацию, данные поступают из поля xml в базе данных MSSQL 2008R2. Загружается из поля xml как <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js" />

Второе редактирование Рабочий образец

using System;
using System.Linq;
using System.Xml.Linq;

namespace Test1
{
    class Test1
    {
        static void Main(string[] args)
        {
            XElement element = XElement.Parse("<div><script /><script>Test</script></div>");
            var EmptySet = (from e in element.DescendantsAndSelf()
                           where e.IsEmpty
                           select e);
            foreach(XElement e in EmptySet)
            {
                e.Value = String.Empty;
            }
            Console.WriteLine(element.ToString(SaveOptions.None));
        }
    }
}

И его результаты

<div>
  <script></script>
  <script>Test</script>
</div>

Ответы [ 2 ]

4 голосов
/ 29 июня 2010

Вы пробовали использовать SaveOptions.DisableFormatting?

Я не могу воспроизвести проблему, заметьте ... какие операции с XML вы выполняете? Вы сами создаете элемент script? Это отлично работает:

using System;
using System.Xml.Linq;

class Test
{
    static void Main()
    {
        XElement element = XElement.Parse("<script></script>");
        // Both of these write <script></script>
        Console.WriteLine(element.ToString(SaveOptions.None));
        Console.WriteLine(element.ToString(SaveOptions.DisableFormatting));
    }
}

(XDocument.Save и XElement.Save имеют одинаковые параметры.)

РЕДАКТИРОВАТЬ: Чтобы изменить элемент без дочерних узлов на один с одним пустым текстовым узлом, вы можете просто установить element.Value в "". Например:

XElement element = XElement.Parse("<script />");
Console.WriteLine(element.ToString()); // Prints <script />
element.Value = "";
Console.WriteLine(element.ToString()); // Prints <script></script>
0 голосов
/ 29 июня 2010

Использование

XElement.Save(XmlWriter writer)

где в качестве вывода XmlWriter вы используете StringWriter - быстрый и надежный способ получить то, что вы хотите.

...