我的 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 節點
例如,如果不存在別名為 的 JSON 元素CAR,則使用默認值添加它
所以基本上,如果 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鍵
uj5u.com熱心網友回復:
在沒有看到完整的 XSLT 的情況下,我進行了一些猜測,但我認為您可以添加(或修改)該dynamicFields屬性的模板,并在其中添加一個測驗以查看陣列是否包含alias具有“CAR”,如果沒有,添加默認<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>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411836.html
標籤:
下一篇:使用節點js讀取xml屬性值
