我是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);
我收到以下错误:
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,我宁愿使用inbuit,因为许可,但只需调用它的主要工作:
String[] args = new String[2];
args[0]="d:\\xmltest.xml";
args[1]="d:\\xml-to-json.xsl";
net.sf.saxon.Transform.main(args);
但我不确定如何在Java中正确编码(不调用main),这样我就可以存储结果。
干杯
答案 0 :(得分:5)
这里有两个问题。 1)为什么第一次尝试失败并出现错误? 2)如何从撒克逊获得结果?
1)第一次尝试失败,因为您使用的是XSLT 1.0处理器。正如page you referenced所说,
XSLTJSON是一个XSLT 2.0样式表 将任意XML转换为JavaScript 对象表示法(JSON)。 ......如果你这样做 你没有XSLT 2.0处理器 可以使用XSLTJSON Lite,这是一个 用于转换XML的XSLT 1.0样式表 到JSONML格式。
因此,如果您使用XSLTJSON Lite,您的问题应该得到解决。
2)如果你还想尝试撒克逊,this page looks useful。它不是直接调用Saxon,而是使用
// set the TransformFactory to use the Saxon TransformerFactoryImpl method
System.setProperty("javax.xml.transform.TransformerFactory",
"net.sf.saxon.TransformerFactoryImpl");
之前的
TransformerFactory tfactory = TransformerFactory.newInstance();