XSLT поможет запустить в Java - PullRequest
       8

XSLT поможет запустить в Java

1 голос
/ 26 октября 2010

Я новичок в мире XSLT, я в основном пытаюсь запустить преобразование JSON из ЗДЕСЬ

Однако, если я использую этот метод:

TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = tFactory.newTransformer(new StreamSource("src\\json\\xml-to-json.xsl"));
        transformer.transform(new StreamSource("src\\json\\xmltest.xml"), new StreamResult(new FileOutputStream("birds.out")));

        System.out.println(result);

Я получаю следующую ошибку:

SystemId Unknown; Line #59; Column #127; Could not find function: if
SystemId Unknown; Line #59; Column #127; Extra illegal tokens: 'then', 'http://json.org/', ':', 'create-node', '(', '$', 'input', ',', 'false', '(', ')', ')', 'else', 'http://json.org/', ':', 'create-simple-node', '(', '$', 'input', ')'
SystemId Unknown; Line #59; Column #127; function token not found.

Если я использую Saxon, я бы предпочел использовать встроенный из-за лицензирования, но просто назовите основной, он работает:

String[] args = new String[2];
args[0]="d:\\xmltest.xml";
args[1]="d:\\xml-to-json.xsl";
net.sf.saxon.Transform.main(args);

Но я не уверен, как правильно кодировать это (не вызывая main) в Java, чтобы я мог сохранить результаты.

Приветствия

1 Ответ

5 голосов
/ 26 октября 2010

Здесь есть два вопроса. 1) Почему первая попытка не удалась с ошибками? и 2) как получить саксонский результат?

1) Первая попытка не удалась, потому что вы используете процессор XSLT 1.0. На странице , на которую вы ссылались , написано:

XSLTJSON - это таблица стилей XSLT 2.0 для преобразовать произвольный XML в JavaScript Нотация объекта (JSON). ... если вы делаете у вас нет процессора XSLT 2.0, вы может использовать XSLTJSON Lite, который является Таблица стилей XSLT 1.0 для преобразования XML в формате JSONML.

Так что если вы используете XSLTJSON Lite , ваши проблемы должны быть решены.

2) Если вы все еще хотите попробовать Saxon, эта страница выглядит полезной . Вместо прямого вызова Saxon он использует

 // set the TransformFactory to use the Saxon TransformerFactoryImpl method
 System.setProperty("javax.xml.transform.TransformerFactory",
                    "net.sf.saxon.TransformerFactoryImpl");

до

 TransformerFactory tfactory = TransformerFactory.newInstance();
...