xslt将模板标签名称替换为模板匹配

时间:2019-12-10 07:49:03

标签: json xslt wso2 xslt-2.0 transformation

我有一个像jsonPayload:

{
  "test": {
    "demo": [
      {
        "thirdA": {
          "forthB": [
            {
              "aaa": [
                {
                  "bbb": "bbb"
                }
              ],
              "ccc": "ccc",
              "ddd": "ddd",
              "eee": "eee",
              "fff": "fff",
              "ggg": "ggg"
            }
          ]
        }
      },
      {
        "thirdA": {
          "forthB": [
            {
              "aaa": [
                {
                  "bbb": "bbb1"
                }
              ],
              "ccc": "ccc1",
              "ddd": "ddd2",
              "eee": "eee3",
              "fff": "fff4",
              "ggg": "ggg5"
            }
          ]
        }
      }
    ]
  }
}

我想使用xslt将thirdA替换为third,将forthB替换为forth。我试过了,但是forthB具有一个jsonElement的jsonArray返回了jsonObject。当我在第一个forthB中添加第二个jsonObject时,我在第一个demo jsonObject中获得了jsonArray,但是在第二个demo jsonArray内的另一个aboutB仍然是jsonObject。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
                <xsl:strip-space elements="*"/>     
                <xsl:template match="@*|node()">
                   <xsl:copy>                              
                          <xsl:apply-templates select="@*|node()"/>
                   </xsl:copy>
                </xsl:template>
                <xsl:template match="//jsonObject/test/demo/thirdA[local-name()='thirdA']">
                    <third>
                        <xsl:apply-templates />
                    </third>
                </xsl:template>
                <xsl:template match="processing-instruction('xml-multiple')[.='forthB']"/>
                <xsl:template match="//jsonObject/test/demo/thirdA/forthB[local-name()='forthB']">
                    <xsl:if test="count(//jsonObject/test/demo/thirdA/forthB) >0">
                      <xsl:processing-instruction name="xml-multiple"/>
                    </xsl:if>
                    <third>
                        <xsl:apply-templates />
                    </third>
                </xsl:template>
</xsl:stylesheet>

感谢任何想法!

致谢

0 个答案:

没有答案