Как использовать XML, обернутый в CDATA, внутри другого XML для XSL-преобразования? - PullRequest
3 голосов
/ 01 февраля 2012

XML-документ содержит другой элемент XML, заключенный в CDATA.

Как можно использовать упакованный XML для преобразования XSL и XSL-FO (версия 1)?

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

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

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

1 голос
/ 01 февраля 2012

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

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


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

...