Unescape во время преобразования XSLT
Я преобразую XML-документ с помощью XSLT в XHTML, используя Saxon, совместимый с XSLT 2.0.
В моих XML-документах у меня есть такие узлы (усеченные здесь для краткости):
<script type="text/javascript">
document.write('<script>')
</script>
То, что я хочу иметь возможность сделать, - это распаковать экранированные символы так, чтобы <
становилось <
и >
становилось >
, в идеале только тогда, когда они встречаются в узлах скрипта.
Тогда конечным результатом будет:
<script type="text/javascript">
document.write('<script>')
</script>
Возможно ли это, и есть ли какие-либо предложения относительно того, как это сделать?2 ответа:
С помощью метода сериализации
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
элементов в a единственный эффективный элементxsl:output
. Если развернуто-имя родителя текстовый узел является членом списка, тогда текстовый узел должен быть выведен как раздел CDATAВ качестве примера:
<xsl:output cdata-section-elements="xhtml:script xhtml:style" xmlns:xhtml="http://www.w3.org/1999/xhtml"/>
Да, это возможно: http://www.w3.org/TR/xslt#disable-output-escaping