为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

狐的传说 2022-06-15 10:04:16
我有以下代码: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.NullPointerExceptionat 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 则无法正常工作。
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

初步答案

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


查看完整回答
反对 回复 2022-06-15
  • 1 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号