繁体   English   中英

JSON 到 XSLT:默认 XML 节点,如果 Z0ECD11C1D7A287401D148A23BBD7 元素不存在

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM