使用 Saxon HE 9.9 设置字符串参数失败
Setting string parameter using Saxon HE 9.9 fails
我有以下代码:
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)
我应该使用另一个 class 而不是 class 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 文件(Martin 的回答)。通过使用 Saxon HE 9.8 它工作正常但使用 Saxon HE 9.9 它不起作用。
初始答案
您需要调用 transformer.setSource() 来提供输入文档。 (诊断可能会更好......) –
评论中讨论后的修订答案
样式表似乎使用<xsl:template name="xsl:initial-template"/>
作为执行的入口点;尽管在 Javadoc 中没有记录,但似乎在 Saxon 9.8 中,XsltTransformer.transform()
之前没有调用 setSource()
或 setInitialTemplate()
会成功 运行 从 [=14= 开始的转换],而 Saxon 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)
我应该使用另一个 class 而不是 class 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作为入口。
我正在使用这个
初始答案
您需要调用 transformer.setSource() 来提供输入文档。 (诊断可能会更好......) –
评论中讨论后的修订答案
样式表似乎使用<xsl:template name="xsl:initial-template"/>
作为执行的入口点;尽管在 Javadoc 中没有记录,但似乎在 Saxon 9.8 中,XsltTransformer.transform()
之前没有调用 setSource()
或 setInitialTemplate()
会成功 运行 从 [=14= 开始的转换],而 Saxon 9.9 则没有。