Unescape во время преобразования XSLT



Я преобразую 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>


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

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"/>

Comments

    Ничего не найдено.