[英]JSON to XSLT : default XML node if JSON element does NOT exist
我的 json 结构如下:
{
"Message" :
{
"dynamicFields" :
[ {
"alias" : "TEST_ALIAS",
"value" : "VALUE"
}
,
{
"alias" : "CAR",
"value" : "TOYOTA"
}
]
}
}
我有一个 xslt 样式表设置如下:
<xsl:template match="j:map[j:string[@key='value' and text() !='']]">
<xsl:if test="j:string[@key='alias' and text() != '']">
<ns2:field name="{j:string[@key='alias']}">
<xsl:value-of select="upper-case(j:string[@key='value'])"/>
</ns2:field>
</xsl:if>
</xsl:template>
它创建了以下元素:
<ns2:field name="TEST_ALIAS">VALUE</ns2:field>
但我不知道如何有条件地添加 xml 节点
例如,如果不存在别名为CAR
的 JSON 元素,则使用默认值添加它
所以基本上,如果 JSON 看起来像:
{
"Message" :
{
"dynamicFields" :
[ {
"alias" : "TEST_ALIAS",
"value" : "VALUE"
}
]
}
}
xml 看起来像:
<ns2:field name="TEST_ALIAS">VALUE</ns2:field>
<ns2:field name="CAR">DEFAULT_CAR_VALUE</ns2:field>
我可以对 JSON 做出的唯一假设是,将存在具有alias
键和value
键的元素
在没有看到完整的 XSLT 的情况下,我猜测了一下,但我认为您可以添加(或修改) dynamicFields
属性的模板,并在其中添加测试以查看数组是否包含具有“CAR”的alias
,如果没有,添加默认的<ns2:field name="CAR"> DEFAULT_CAR_VALUE</ns2:field>
元素:
<xsl:template match="j:array[@key='dynamicFields']">
<xsl:apply-templates />
<xsl:variable name="default-field" select="'CAR'"/>
<xsl:if test="not(j:map/j:string[@key='alias'] = $default-field)">
<ns2:field name="{$default-field}">
<xsl:text>DEFAULT_CAR_VALUE</xsl:text>
</ns2:field>
</xsl:if>
</xsl:template>
<xsl:template match="j:map[j:string[@key='value' and text() !='']]">
<xsl:if test="j:string[@key='alias' and text() != '']">
<ns2:field name="{j:string[@key='alias']}">
<xsl:value-of select="upper-case(j:string[@key='value'])"/>
</ns2:field>
</xsl:if>
</xsl:template>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.