我有以下代碼: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上提出了一個問題
添加回答
舉報
0/150
提交
取消