подсчитать все вхождения xsl: result-document в данной таблице стилей - PullRequest
0 голосов
/ 21 января 2020

У меня проблема с частью моего приложения, в которой у меня есть несколько служебных классов для функциональности преобразования xslt. Я использую SaxonHE в качестве реализации XSLT Transformer.

Мой вспомогательный класс имеет функцию: URL mapFile(URL input, String stylesheetPath).

Принимает URL-адрес одного XML -файла в качестве входного и возвращает URL для созданного XML -Файла. Он обрабатывает инициализацию и выполнение XSLT-преобразования.

Но таблица стилей теоретически может создавать несколько файлов XML с тегами xsl: result-document, и я хотел бы, чтобы мой служебный класс мог распознавать, если заданный Таблица стилей будет делать это и обрабатывать это правильно.

Моя идея состояла в том, чтобы проанализировать / проанализировать таблицу стилей из моего Java кода и подсчитать все вхождения xsl: result-document.

С помощью значения атрибутов href, я бы также знал, где таблица стилей создает выходные файлы XML, поскольку я хочу вернуть URL-адрес, указывающий на их местоположение.

Таким образом, мой измененный служебный метод будет: List<URL> mapFile(URL input, String stylesheetPath) и возвращает количество URL-адресов в зависимости от того, сколько файлов создано данной таблицей стилей.

Но я понятия не имею, как это сделать в коде Java и во всех моих поисках в Google, касающихся подсчета элементов в xsl. Таблица стилей привела к объяснениям, как считать XML элементов ввода XML из таблицы стилей, это не то, что я хочу сделать.

РЕДАКТИРОВАТЬ: я закончил тем, что вообще не делал никакого анализа таблицы стилей. Я просто создаю папку, и если кто-то пишет таблицу стилей, которая не помещает все файлы результатов в эту папку, то это их вина, если они не получают URL-адрес для этого документа результата. Хакерское решение, но оно работает для моего варианта использования.

1 Ответ

1 голос
/ 21 января 2020

Для одномодульной таблицы стилей это очень просто: просто выполните выражение XPath count(//xsl:result-document).

Для таблицы стилей с несколькими модулями это становится сложнее, потому что вы должны следовать xsl:include и xsl:import ссылки, и, в частности, вы должны обнаружить циклы в графе включения / импорта, чтобы вы не go превратились в бесконечное l oop.

Вы можете экспортировать таблицу стилей в файл SEF и выполнить count(//*:resultDoc) в файле SEF. К сожалению, это Saxon-EE, который будет стоить вам денег, но тогда написание кода вручную будет стоить вам тоже денег ...

Но на самом деле вы просили две разные вещи. Сначала вы говорите, что хотите узнать количество xsl:result-document инструкций, затем говорите, что хотите узнать, сколько документов результатов создано. Это не одно и то же, потому что вы не знаете, как часто выполняется каждая инструкция xsl:result-document.

Я подозреваю, что вы можете решить эту проблему, зарегистрировав обработчик документов результата в Saxon и используя его для мониторинга звонки на xsl:result-document во время выполнения.

...