XML-документ содержит другой элемент XML, который завернут в CDATA.Как использовать XML, завернутый в CDATA внутри другого XML для преобразования XSL?
Как можно использовать обернутый XML для преобразования XSL и XSL-FO (версия 1)?
XML-документ содержит другой элемент XML, который завернут в CDATA.Как использовать XML, завернутый в CDATA внутри другого XML для преобразования XSL?
Как можно использовать обернутый XML для преобразования XSL и XSL-FO (версия 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.
Если вы готовы предпринять несколько шагов трансформации, то это возможно. Выведите соответствующий раздел с отключением-выводом вывода, чтобы превратить экранированный XML в действительный XML. Обработайте его на следующем шаге.
Для этого требуется, чтобы экранированный XML был хорошо сформирован. И некоторые парсеры требуют, чтобы промежуточный результат был сериализован (на диск или еще), чтобы убедиться, что экранированный XML должным образом не экранирован, прежде чем он войдет в последующие преобразования.
Это должно быть возможным во втором проходе, как уже указывалось [@grtjn] (http://stackoverflow.com/a/9108085/413020). Не так ли? – Alberto
Имейте в виду, что он может различать, как два этапа процесса связаны друг с другом. Я видел ситуации, в которых два этапа XSLT были связаны в Java с помощью событий SAX, но оказалось, что неэквивация была отложена до сериализации, поэтому последующие XSLT не могли получить доступ к необработанному XML. – grtjn
@grtjn: Да, дерево результатов должно быть сериализовано для 'disable-output-escaping =" yes "' для работы. – mzjn