【发布时间】:2019-12-28 20:52:31
【问题描述】:
我正在使用 Java 1.8、Saxon-HE 版本 9.9.1-4 版本和 xslt3.0 将 JSON 转换为 XML。
输入 JSON
{
"analystId": "Test",
"jobId": "",
"profileData": {
"allAuthorCoverage": false,
"assetClasses": [
{
"code": "Test1"
}
]
}
}
XSLT3.0
<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>
</xsl:stylesheet>
生成的输出 XML
<?xml version="1.0" encoding="UTF-8"?>
<map xmlns="http://www.w3.org/2005/xpath-functions">
<analystId xmlns="">Test</analystId>
<jobId xmlns=""/>
<profileData xmlns="">
<allAuthorCoverage>false</allAuthorCoverage>
<assetClasses>
<map xmlns="http://www.w3.org/2005/xpath-functions">
<code xmlns="">Test1</code>
</map>
</assetClasses>
</profileData>
</map>
需要输出 XML
<?xml version="1.0" encoding="UTF-8"?>
<analystId>Test</analystId>
<jobId />
<profileData>
<allAuthorCoverage>false</allAuthorCoverage>
<assetClasses>
<code>Test1</code>
</assetClasses>
</profileData>
我们仍然可以在生成的输出中看到 <map> 元素和 xmlns 属性,我的要求是删除它们。
请帮我从生成的输出和 xmlns 属性中删除 Map 元素。
如果我用新属性扩展我的 json 结构,这些 map 元素和 xmlns 属性不应再次添加回来。
【问题讨论】:
-
您需要编辑您的问题并向我们展示您想要输出的 XML。
-
首先,如果您不想从输入中复制节点,我只需从您显示的代码中删除
xsl:template match="@* | node()"。 -
[~Martin] 很抱歉没有添加预期的输出。我已经为参考添加了预期的输出
-
那么我认为我的回答涵盖了这一点,你只是在你的代码中放置了一个带有身份转换的模板,你应该省略。
-
@JineshParikh 感谢您分享这个主题,我正在编写类似的代码,您能否与我分享一个 java 代码 sn-p,关于您如何将 jsonText 参数传递给 XSL样式表?或任何有助于理解转换流程的代码示例。谢谢。