JSON2XML:序言中不允许包含内容
JSON2XML : Content is not allowed in prolog
我的错误是 **SXXP0003: Error reported by XML parser: Content is not allowed in prolog**.
我使用了 Windows-10
和 saxon9.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 的建议。一切正常。
我的错误是 **SXXP0003: Error reported by XML parser: Content is not allowed in prolog**.
我使用了 Windows-10
和 saxon9.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 的建议。一切正常。