Подтвердить что ты не робот

Как установить Saxon как Xslt-процессор в Java?

Это простой вопрос, но я не могу найти ответ. У меня есть таблица стилей XSLT 2.0, которую я пытаюсь обрабатывать на Java. Он полагается на элементы XSL из Саксона.

Мой текущий класс отлично работает с простым XSLT 1.0, но я получаю ошибки о непризнанных элементах с моим 2.0 XSLT, встроенным в Saxon.

Я не могу понять, как сказать Java использовать Saxon в качестве процессора. Я использую javax.xml.transform в своем классе. Это свойство, которое я могу установить? На что я его устанавливаю? Спасибо!

Edited Я выяснил, как установить свойство для использования Saxon, но теперь я получаю эту ошибку.

Provider net.sf.saxon.TransformerFactoryImpl not found

Как включить саксон в мое приложение?

4b9b3361

Ответ 1

Существует несколько способов сделать это (в порядке приоритета поиска):

Прямое мгновение

Явным образом создайте экземпляр Saxon factory (с комментарием Майкла выше):

    TransformerFactory fact = new net.sf.saxon.TransformerFactoryImpl()

Укажите имя класса

Задайте класс factory при его создании:

    TransformerFactory fact = TransformerFactory.newInstance(
            "net.sf.saxon.TransformerFactoryImpl", null);

Примечание: доступен с Java 6. версия Java 5 не имеет этого метода.

Использовать системное свойство

Задайте системное свойство javax.xml.transform.TransformerFactory перед созданием экземпляра:

    System.setProperty("javax.xml.transform.TransformerFactory",    
            "net.sf.saxon.TransformerFactoryImpl");

Или в командной строке (строка для чтения):

    java -Djavax.xml.transform.TransformerFactory=
            cnet.sf.saxon.TransformerFactoryImpl YourApp

Использовать файл свойств

Создайте следующий файл:

JRE/lib/jaxp.properties

Со следующим содержимым:

javax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl

Сервисный погрузчик

Создайте следующий файл в любом JAR на CLASSPATH:

META-INF/services/javax.xml.transform.TransformerFactory

Со следующим содержимым:

net.sf.saxon.TransformerFactoryImpl 

Платформа по умолчанию

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

Я бы счел этот ответ аргументом против Java-способа делать что-то.

Ответ 2

Вы можете явно построить необходимые объекты Source и Result, чтобы убедиться, что они являются реализациями Saxon, а не теми, которые есть по умолчанию.

Ответ 3

Я написал обертку вокруг Saxon parser, чтобы сделать его использование простым, и я назвал его " EasySaxon": вы можете найти это здесь, с некоторым фрагментом кода образцов.

Надеюсь, что это поможет.

Франческо