HTML неправильно отображается в .NET - PullRequest
1 голос
/ 13 января 2009

Я пытаюсь взять строку "<BR>" в VB.NET и преобразовать ее в HTML через XSLT. Когда HTML выходит, он выглядит так:

&lt;BR&gt;

Я могу только предположить, что это идет вперед и пытается сделать это. Можно ли как-нибудь преобразовать эти &lt;/&gt; в скобки, чтобы получить разрыв строки, за которым я пытаюсь?

Ответы [ 5 ]

5 голосов
/ 13 января 2009

Проверьте, имеет ли XSLT:

<xsl:output method="html"/>

редактировать: объяснение из комментариев

По умолчанию XSLT выводит как XML (1), что означает, что он будет экранировать любые значимые символы. Вы можете переопределить это в определенных случаях с помощью атрибута disable-output-escaping="yes" (intro здесь ), но гораздо более мощным является изменение выходных данных на явное значение HTML, которое обеспечивает такое же преимущество во всем мире, как показано ниже:

  • Для элементов скрипта и стиля замените все экранированные символы (например, как & и>) с их фактическими значениями (& и> соответственно).
  • Для атрибутов замените все вхождения> на>.
  • Запишите пустые элементы, такие как <br>, <img> и <input> без закрывающие теги или косые черты.
  • Напишите атрибуты, которые передают информацию по их присутствию, как в отличие от их стоимости, таких как проверено и выбрано, свернуто форма.

из солидной статьи IBM , посвященной теме, более свежее освещение от stylusstudio здесь

Если HTML-вывод - это то, что вам нужно, HTML-вывод - это то, что вы должны указать.

(1) На самом деле есть угловой случай, когда выход по умолчанию равен HTML, но я не думаю, что он универсален, и от него глупо зависеть.

0 голосов
/ 14 января 2009

Понял! Поверх выбранного ответа я также сделал что-то похожее на эту строку:

htmlString = htmlString.Replace("&lt;","<")
htmlString = htmlString.Replace("&gt;",">")

Я думаю, однако, что в итоге я могу просто использовать теги <pre> для сохранения всего.

0 голосов
/ 13 января 2009

Не знаю насчет XSLT, но ..

Один обходной путь может использовать HttpUtility.HtmlDecode из пространства имен System.Web.

using System;
using System.Web;

class Program
{
    static void Main()
    {
        Console.WriteLine(HttpUtility.HtmlDecode("&lt;br&gt;"));
        Console.ReadKey();
    }
}

...

0 голосов
/ 13 января 2009

Попробуйте обернуть это с <xsl:text disable-output-escaping="yes">&lt;br&gt;</xsl:text>

0 голосов
/ 13 января 2009

Строка "<br>" уже является HTML, поэтому вы можете просто Response.Write("<br>").

Но вы имеете в виду XSLT, поэтому я представляю, что происходит какое-то преобразование. В этом случае, несомненно, преобразование должно вставлять его в правильном месте в качестве узла. Лучший вопрос, скорее всего, даст лучший ответ

...