2012-02-01 1 views

ответ

1

Это невозможно при использовании стандартных XSLT 1.0 или 2.0 в одном преобразовании.

Это может быть сделано с использованием Saxon 9 Professional Edition или Enterprise Edition. Эти продукты имеют функцию расширения saxon:parse(). Или используйте функцию XPath 3.0parse-xml(), которая также поддерживается в последних версиях Saxon PE/EE.

Как указывает @grtjn, это можно сделать с двухпроходным процессом. Таблица стилей 1 превращает текст, обернутый CDATA, в анализируемый XML (с использованием <xsl:value-of select="whatever" disable-output-escaping="yes"/>). Затем таблица стилей 2 обрабатывает сериализованный результат, созданный таблицей стилей 1.

+0

Это должно быть возможным во втором проходе, как уже указывалось [@grtjn] (http://stackoverflow.com/a/9108085/413020). Не так ли? – Alberto

+0

Имейте в виду, что он может различать, как два этапа процесса связаны друг с другом. Я видел ситуации, в которых два этапа XSLT были связаны в Java с помощью событий SAX, но оказалось, что неэквивация была отложена до сериализации, поэтому последующие XSLT не могли получить доступ к необработанному XML. – grtjn

+0

@grtjn: Да, дерево результатов должно быть сериализовано для 'disable-output-escaping =" yes "' для работы. – mzjn

2

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

Для этого требуется, чтобы экранированный XML был хорошо сформирован. И некоторые парсеры требуют, чтобы промежуточный результат был сериализован (на диск или еще), чтобы убедиться, что экранированный XML должным образом не экранирован, прежде чем он войдет в последующие преобразования.