XSLT - 需要帮助才能转换成类似 JSON 的模糊格式

XSLT - Need help for transformation into vaguely JSON-like format

我有一个要求,我想将内部 Table 数据转换为 JSON 格式。

假设我的内部 table 名称是 ZEMPLOYEE,其中的字段是 EMPID、ENAME、ESAL。 普通调用转换会将其转换为以下格式。

Data-[ {EMPID:101,ENAME:'ABCD',ESAL:100} , {EMPID:102,ENAME:'EFGH',ESAL:200}, {EMPID:103,ENAME:'IJKL',ESAL:300} ]

但我的要求是输出格式应该是这样的:

Data-[ {EMPID,ENAME,ESAL} , { 101,ABCD,100 } , {102 , EFGH , 200} , {103,IJKL,300} ]...

第一个大括号将包含我的字段 table,其余大括号包含实际数据。

任何人都可以帮助我使用 XSLT 转换或简单转换实现上述输出吗?

您向我们展示的内容比 JSON 更接近 CSV。尝试类似的东西:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>

<xsl:template match="/*">
    <!-- header -->
    <xsl:text>Data-[{</xsl:text>
    <xsl:for-each select="*[1]/*">
        <xsl:value-of select="local-name()"/>
        <xsl:if test="position()!=last()">
            <xsl:text>,</xsl:text>
        </xsl:if>
    </xsl:for-each>
    <xsl:text>},</xsl:text>

    <!-- data -->
    <xsl:for-each select="*">
        <xsl:text>{</xsl:text>
        <xsl:for-each select="*">
            <xsl:value-of select="."/>
            <xsl:if test="position()!=last()">
                <xsl:text>,</xsl:text>
            </xsl:if>
        </xsl:for-each>
        <xsl:text>}</xsl:text>
        <xsl:if test="position()!=last()">
            <xsl:text>,</xsl:text>
        </xsl:if>
    </xsl:for-each>
    <xsl:text>]</xsl:text>
</xsl:template>

</xsl:stylesheet>

应用于格式良好的(!)输入时示例:

<FLIGHT_TABLE>
  <ZSCARR_LINE>
    <CARRID>AA</CARRID>
    <CARRNAME>American Airlines</CARRNAME>
    <CURRCODE>USD</CURRCODE>
  </ZSCARR_LINE>
  <ZSCARR_LINE>
    <CARRID>AB</CARRID>
    <CARRNAME>Air Berlin</CARRNAME>
    <CURRCODE>EUR</CURRCODE>
  </ZSCARR_LINE>
  <ZSCARR_LINE>
    <CARRID>AC</CARRID>
    <CARRNAME>Air Canada</CARRNAME>
    <CURRCODE>CAD</CURRCODE>
  </ZSCARR_LINE>
  <ZSCARR_LINE>
    <CARRID>AF</CARRID>
    <CARRNAME>Air France</CARRNAME>
    <CURRCODE>EUR</CURRCODE>
  </ZSCARR_LINE>
</FLIGHT_TABLE>

结果将是:

Data-[{CARRID,CARRNAME,CURRCODE},{AA,American Airlines,USD},{AB,Air Berlin,EUR},{AC,Air Canada,CAD},{AF,Air France,EUR}]