使用 Saxon HE 9.9 设置字符串参数失败

我有以下代码:


public static String converterXml(String json, XsltTransformer transformer) throws SaxonApiException {

    DocumentBuilder builder = processor.newDocumentBuilder();

    builder.setLineNumbering(true);

    builder.setDTDValidation(false);

    StringWriter writer = new StringWriter();

    Serializer out = processor.newSerializer(writer);

    out.setOutputProperty(Serializer.Property.INDENT, "yes");


    QName qname = new QName("json-input");

    XdmValue value = new XdmAtomicValue(json);

    transformer.setParameter(qname, value);


    transformer.setDestination(out);

    transformer.transform();


    return writer.toString();

}

通过使用 Saxon HE v9.9,它无法获取 java.lang.NullPointerException:


Exception in thread "main" java.lang.NullPointerException

at java.util.Objects.requireNonNull(Objects.java:203)

at net.sf.saxon.s9api.AbstractXsltTransformer.applyTemplatesToSource(AbstractXsltTransformer.java:336)

at net.sf.saxon.s9api.XsltTransformer.transform(XsltTransformer.java:338)

我应该使用另一个类而不是XdmAtomicValue类,但我不知道是哪一个。


更新:


完整的代码是:


Processor processor = new Processor(false);

XsltCompiler comp = processor.newXsltCompiler();

XsltTransformer transformer = comp.compile(new StreamSource(new File("/path/json-to-xml.xsl")));

String json = new String(Files.readAllBytes(Paths.get("path-json/invoice.json")));

String xml = converterXml(json, transformer);

我只需要设置 json 作为参数,不需要其他文件 XML 作为条目。


我正在使用这个解决方案来转换 JSON 文件(马丁的回答)。使用 Saxon HE 9.8 可以正常工作,但使用 Saxon HE 9.9 则无法正常工作。


狐的传说
浏览 107回答 1
1回答

子衿沉夜

初步答案您需要调用transformer.setSource() 来提供输入文档。(诊断可能会更好......) -在评论中讨论后修订的答案样式表似乎被<xsl:template name="xsl:initial-template"/>用作执行的入口点;尽管 Javadoc 中没有记录,但似乎在 Saxon 9.8 中,XsltTransformer.transform()之前没有调用setSource()或setInitialTemplate()会成功运行从 开始的转换xsl:initial-template,而 Saxon 9.9 则没有。我在https://saxonica.plan.io/issues/4137上提出了一个问题
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java