HTML неверно отображен в .NET
-
22-07-2019 - |
Вопрос
Я пытаюсь взять за ниточку " .<BR>
" в VB.NET и преобразуйте его в HTML через XSLT.Однако, когда HTML выходит, он выглядит примерно так:
<BR>
Я могу только предположить, что он идет дальше и пытается это отрисовывать.Есть ли какой-нибудь способ, которым я могу их преобразовать </>
обратно в скобки, чтобы я получил перевод строки, к которому стремлюсь?
Решение
Проверьте, что XSLT имеет:
<xsl:output method="html"/>
Редактировать:объяснение из комментариев
По умолчанию XSLT выводит данные в виде XML (1), что означает, что в нем не будет никаких значащих символов.Вы можете переопределить это в определенных экземплярах с помощью атрибута disable-output-escaping="yes"
(вступление здесь) но гораздо более эффективным является изменение выходных данных на явное значение HTML, которое дает те же преимущества во всем мире, что и следующее:
- Для элементов script и style замените все экранируемые символы (такие как & и >) на их фактические значения (& и > соответственно).
- Что касается атрибутов, замените все вхождения > на >.
- Запишите пустые элементы, такие как
<br>
,<img>
, и<input>
без закрывающих тегов или косых черт.- Запишите атрибуты, которые передают информацию своим присутствием в отличие от их значения, такие как проверено и выбрано, в свернутом виде.
от солидной компании IBM Статья освещая тему, более свежий репортаж от stylusstudio здесь
Если вывод HTML - это то, что вам нужно, вам следует указать вывод HTML.
(1) На самом деле есть угловой случай, когда вывод по умолчанию выполняется в формате HTML, но я не думаю, что это универсально, и зависеть от этого довольно глупо.
Другие советы
Попробуйте обернуть его с помощью <xsl:text disable-output-escaping="yes"><br></xsl:text>
Не знаю насчет XSLT, но..
Одним из обходных путей может быть использование HttpUtility.Htmlдекод из системы.Веб-пространство имен.
using System;
using System.Web;
class Program
{
static void Main()
{
Console.WriteLine(HttpUtility.HtmlDecode("<br>"));
Console.ReadKey();
}
}
...
Понял! Поверх выбранного ответа я также сделал что-то похожее на эту строку:
htmlString = htmlString.Replace("<","<")
htmlString = htmlString.Replace(">",">")
Тем не менее, я думаю, что в конечном итоге я могу просто использовать теги <pre>
для сохранения всего.
Строка " <br>
" это уже HTML, так что вы можете просто Response.Write("<br>")
.
Но вы имеете в виду XSLT, поэтому я представляю, что происходит какое-то преобразование. В этом случае, несомненно, преобразование должно вставлять его в правильном месте в качестве узла. Лучший вопрос, скорее всего, даст лучший ответ.