我有以下要通过XSLT转换的JSON文件。
[
{
"firstName": "John",
"lastName": "Andy",
"age": "15"
},
{
"firstName": "Ann",
"lastName": "Heather",
"age": "13"
}
]
,结果如下:
[
{
"firstName": "John",
"lastName": "Andy"
},
{
"firstName": "Ann",
"lastName": "Heather"
}
]
我要做的是将JSON转换为XML,然后使用以下代码处理文件:
<xsl:param name="json" as="xs:string">
<xsl:template match="/*" name="xsl:initial-template">
<xsl:variable name="input-as-xml" select="json-to-xml($json)"/>
<xsl:variable name="transformed-xml" as="element(array)">
<array xmlns="http://www.w3.org/2005/xpath-functions">
<xsl:for-each select="/node()">
<map xmlns="http://www.w3.org/2005/xpath-functions">
<string key="firstName">
<xsl:value-of select="$input-as-xml//string[@key='firstName']"/>
</string>
<string key="lastName">
<xsl:value-of select="$input-as-xml//string[@key='lastName']"/>
</string>
</map>
</xsl:for-each>
</array>
</xsl:variable>
<xsl:value-of select="xml-to-json($transformed-xml)"/>
</xsl:template>
使用上述代码的输出是:
[
{
"firstName": "John Ann John Ann",
"lastName": "Andy Heather Andy Heather"
}
]
我需要一些帮助来更改代码,以所需的方式检索所需的信息。
答案 0 :(得分:0)
您的xsl:for-each
未正确设置上下文。我想您可能想要:
<xsl:for-each select="$input-as-xml/*/*">
<map xmlns="http://www.w3.org/2005/xpath-functions">
<string key="firstName">
<xsl:value-of select="string[@key='firstName']"/>
</string>
<string key="lastName">
<xsl:value-of select="string[@key='lastName']"/>
</string>
</map>
</xsl:for-each>
但是我认为您可以使用xsl:copy-of:
简化它 <xsl:for-each select="$input-as-xml/*/*">
<map xmlns="http://www.w3.org/2005/xpath-functions">
<xsl:copy-of select="*[@key=('firstName', 'lastName')]"/>
</map>
</xsl:for-each>
答案 1 :(得分:0)
我强烈建议您使用上一个问题的答案中建议的方法,即通过模板推送json-to-xml
结果,这样您只需要一个空模板即可删除{{1 }}:
age