使用xslt 3.0解析json时,prolog错误中不允许使用内容

时间:2018-01-30 17:10:05

标签: json saxon xslt-3.0

我正在尝试将一个POC转换为xml格式。现在我使用Saxon-HE版本9.8.0-5

通过java进行

让我们假设一个简单的json:

.pro

现在java代码如下:

LIBS += D:\opencv-build\bin\libopencv_core320.dll
LIBS += D:\opencv-build\bin\libopencv_highgui320.dll
LIBS += D:\opencv-build\bin\libopencv_imgcodecs320.dll
LIBS += D:\opencv-build\bin\libopencv_imgproc320.dll
LIBS += D:\opencv-build\bin\libopencv_features2d320.dll
LIBS += D:\opencv-build\bin\libopencv_calib3d320.dll

但我得到以下错误:

  

sample_test1.json的第1行第1列出错:   SXXP0003:XML解析器报告错误:prolog中不允许使用内容。

当我尝试将json内容放在任何xml元素中并进行处理时,它就成功了。为什么?? 我们不能直接处理json而不将其内容放入任何xml结构中吗?

1 个答案:

答案 0 :(得分:0)

错误消息表明您可能正在使用XML解析器来解析JSON输入。目前尚不清楚变量" inputjson"保存实际的JSON文本,或包含实际JSON文本的文件的URI,但不管怎样,它都不起作用。

因为模板规则在除XML节点之外的任何东西上都不是很有用(尽管事实上XSLT 3.0实际上允许它们),我倾向于写这样的转换:

<xsl:param name="json-uri"/>
<xsl:initial-template name="main">
  <xsl:variable name="parsed-json" select="json-doc($json-uri)"/>
  ....
</xsl:initial-template>

(假设您从包含JSON的文件的URI开始)

然后使用s9api代码沿

行调用它
Xslt30Transformer trans = ...;
Map<QName, XdmValue> params = new HashMap<>();
params.add(new QName("", "json-uri"), new XdmAtomicValue(jsonInputUri));
trans.setStylesheetParameters(params);
trans.callTemplate(new QName("", "main"), serializer);