JSON2XML:序言中不允许包含内容

JSON2XML : Content is not allowed in prolog

我的错误是 **SXXP0003: Error reported by XML parser: Content is not allowed in prolog**. 我使用了 Windows-10saxon9.jar 文件。如何解决此错误?

在我的 command prompt 中,我使用了:

java -cp saxonb9\saxon9-7.jar net.sf.saxon.Transform -it:"init" -xsl:"simple3.xsl" -s:"simple3.json"

我的JSON是:

{"analystId": "Test","jobId": "","profileData": {"allAuthorCoverage": false,"assetClasses": [{"code": "Test1"}]} } `

我的 XSLT 是:

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes" /> 
  <xsl:strip-space elements="*"/>
  <xsl:param name="jsonText"/>

  <xsl:template match="@*|node()"> 
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template> 

  <xsl:template name="init">
    <xsl:apply-templates select="json-to-xml($jsonText)"/> 
  </xsl:template>

 <xsl:template match="*[@key]" >
  <xsl:element name="{@key}">
    <xsl:apply-templates/>
  </xsl:element>
</xsl:template>

提前致谢。

您需要删除 -s 选项,因为它仅可用于 XML 输入。所以使用

java -cp saxonb9\saxon9-7.jar net.sf.saxon.Transform -it:"init" -xsl:"simple3.xsl" 

正如你声明的那样<xsl:param name="jsonText",我想你也想传入参数

java -cp saxonb9\saxon9-7.jar net.sf.saxon.Transform -it:"init" -xsl:"simple3.xsl" jsonText=JSONGoesHere

尽管根据您的命令行 shell 可能很难直接用引号传入 JSON。也许在文件中使用 JSON 并传入文件 name/URI 然后使用 unparsed-text($json-file).

我也想知道为什么您似乎使用 Saxon 9.7,第一个实现 XSLT 3 和 XPath 3.1 标准的 Saxon 版本是 Saxon 9.8,因此最好使用 Saxon 9.8 或更高版本来处理 XSLT 中指定的功能3 and/or XPath 3.1.

我使用的是 Saxon 9.9(HE),我的 Updatd XSL 是:

<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes" /> 
  <xsl:strip-space elements="*"/>
  <xsl:param name="jsonText"/>
  <xsl:param name="input" select="'simple3.json'"/>

 <xsl:template match="@*|node()"> 
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
 </xsl:template> 

 <xsl:template name="init">
    <xsl:apply-templates select="json-to-xml(unparsed-text($input))" mode="copy"/>
 </xsl:template>

 <xsl:template match="node() | @*" mode="copy">
    <xsl:copy>
        <xsl:apply-templates select="node() | @*" mode="copy"/>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

在我的命令提示符中 shell: c:transform -it:"init" -xsl:simple3.xsl -o:out.xml

感谢 Margin Honnen 的建议。一切正常。