Вывести дважды закодированную строку в виде HTML из источника XML с использованием XSL - PullRequest
1 голос
/ 06 октября 2011

У меня есть источник XML, содержащий контент, который мне нужно отобразить на веб-странице в виде HTML с использованием XSL.Один из узлов XML содержит двойное значение в кодировке HTML.Это то, что мне нужно для вывода HTML.

Таким образом, исходный ввод HTML был <p><strong>hello world</strong></p>, но затем он сохраняется как дважды HTML-кодированный текст.

  • оригинальная версия: <p><strong>hello world</strong></p>
  • первая кодировка HTML: &lt;p&gt;&lt;strong&gt;hello world&lt;/strong&gt;&lt;/p&gt;
  • вторая кодировка HTML: &amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;hello world&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;

Я получаю только эту вторую HTML-кодировку из моего XML-источника

<CONTENT>
   <RECORD>
      <OVERVIEW>&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;hello world&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;</OVERVIEW>
   </RECORD>
</CONTENT>

Вывод в html в XSL с использованием xsl: output приводит к началу работы, а отключение-выход-выход в моем теге xsl: value-of возвращает меняза один слой HTML-кодировки.

Но следующий XSL:

<xsl:for-each select = "//CONTENT/RECORD">
   <xsl:value-of disable-output-escaping="yes" select = "OVERVIEW" />
</xsl:for-each>

Возвращает только:

&lt;p&gt;&lt;strong&gt;hello world&lt;/strong&gt;&lt;/p&gt;

Это не возвращает меня обратно кисходный ввод <p><strong>hello world</strong></p>

Поэтому я искал способ дважды "или" отключить-вывод-выход = = "да".

Любые идеи, как я могу это сделатьэто только в XSL?

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Помните, что операция, которая «освобождает» содержимое, правильно называется синтаксическим анализом, а операция, которая «избегает» ее, называется сериализацией. Таким образом, чтобы выполнить два уровня эскейпинга, вызовите parse (parse (X)). Функции расширения для выполнения операций parse () и serialize () доступны в некоторых процессорах XSLT, таких как Saxon, а в других вы можете написать свои собственные.

1 голос
/ 06 октября 2011

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

...