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}]
我有一个要求,我想将内部 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}]