XSLT帮助在java中运行

joe*_*e90 1 xslt json saxon

我是XSLT世界的新手,我基本上试图从HERE运行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);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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.
Run Code Online (Sandbox Code Playgroud)

如果我使用Saxon,我宁愿使用inbuit,因为许可,但只需调用它的主要工作:

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

但我不知道如何在Java中正确编码(不调用main),以便我可以存储结果.

干杯

Lar*_*rsH 6

这里有两个问题.1)为什么第一次尝试失败并出现错误?2)如何从撒克逊获得结果?

1)第一次尝试失败,因为您使用的是XSLT 1.0处理器.正如您引用页面所示,

XSLTJSON是一个XSLT 2.0样式表,用于将任意XML转换为JavaScript Object Notation(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");
Run Code Online (Sandbox Code Playgroud)

之前

 TransformerFactory tfactory = TransformerFactory.newInstance();
Run Code Online (Sandbox Code Playgroud)

  • 好的和彻底的答案,+ 1. (2认同)