Unescape во время XSLT-преобразования - PullRequest
4 голосов
/ 14 января 2011

Я преобразую XML-документ, используя XSLT, в XHTML, используя Saxon, совместимый с XSLT 2.0.

В моих документах XML у меня есть такие узлы (здесь для краткости сокращено):

  <script type="text/javascript"> 
  document.write('&lt;script&gt;')
  </script> 

То, что я хочу сделать, это освободить экранированные символы, чтобы &lt; стало <, а &gt; стало >, в идеале, только когда они встречаются внутри узлов сценария.

Окончательный результат будет:

  <script type="text/javascript"> 
  document.write('<script>')
  </script> 

Возможно ли это, и есть ли какие-либо предложения относительно того, как?

Ответы [ 2 ]

3 голосов
/ 14 января 2011

С помощью метода сериализации html содержимое script не экранируется.

От http://www.w3.org/TR/xslt#section-HTML-Output-Method

Метод вывода html не должен выполнять экранированиедля содержимого элементов script и style

Обновление

Как прокомментировал д-р @Michael Kay, если вы генерируете XHTML (и отправка с правильным MIME-типом) для браузеров, которые понимают XHTML, тогда вам не нужно беспокоиться об удалении.Также следует отметить, что встроенный скрипт не считается хорошей практикой.

Если вы все еще хотите сгенерировать XHTML, следуя рекомендациям для устаревших браузеров, с методом сериализации xml вы можете объявить содержимое script какРаздел CDATA.

С http://www.w3.org/TR/xslt#section-XML-Output-Method

Атрибут cdata-section-elements содержит разделенный пробелами список QNames.Каждое QName раскрывается в расширенное имя с использованием объявлений пространства имен, действующих на элемент xsl:output, в котором происходит QName;если есть пространство имен по умолчанию, оно используется для QNames, которые не имеют префикса.Расширение выполняется перед объединением нескольких элементов xsl:output в один эффективный элемент xsl:output.Если расширенное имя родительского элемента текстового узла является членом списка, текстовый узел должен быть выведен в виде раздела CDATA

Как пример:

<xsl:output cdata-section-elements="xhtml:script xhtml:style"
            xmlns:xhtml="http://www.w3.org/1999/xhtml"/>
1 голос
/ 14 января 2011
...