1

我是 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 一个,但只需调用它的 main :

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),以便我可以存储结果。

干杯

4

1 回答 1

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,这个页面看起来很有用。它不是直接调用撒克逊人,而是使用

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

之前

 TransformerFactory tfactory = TransformerFactory.newInstance();
于 2010-10-26T11:11:04.437 回答