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

问题描述 投票:0回答:1

我有以下代码:

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作为条目。

我正在使用这个solution来转换JSON文件(Martin的回答)。通过使用Saxon HE 9.8它工作正常,但使用Saxon HE 9.9它不起作用。

java saxon
1个回答
0
投票

初步答复

您需要调用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提出了一个问题

© www.soinside.com 2019 - 2024. All rights reserved.