使用 xslt 2.0 将 xml 转换为 xml (excel):分组依据
transform xml to xml (excel) with xslt 2.0: group by
在将 xml 转换为 Excel 的上下文中(如打开 XML)我想按某些类别分组以安排我的输出但显示类别名称为 header.例如:
<MYROW>
<CATEGORYNAME>first</CATEGORYNAME>
<DATA>10</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>second</CATEGORYNAME>
<DATA>20</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>second</CATEGORYNAME>
<DATA>30</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>first</CATEGORYNAME>
<DATA>100</DATA>
</MYROW>
应该转化为:
<ROW>
<CELL>
<DATA>
first
</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>
10
</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>
100
</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>
second
</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>
20
</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>
30
</DATA>
</CELL>
</ROW>
我尝试了 group-by、过滤器、变量,但找不到将按键分组和关联节点放在同一元素(excel 行)下的方法。
我正在使用 altova mapforce。
这是一个简单的分组问题:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="ROOT">
<Worksheet>
<xsl:for-each-group select="MYROW" group-by="CATEGORYNAME">
<ROW>
<CELL>
<DATA>
<xsl:value-of select="current-grouping-key()"/>
</DATA>
</CELL>
</ROW>
<xsl:apply-templates select="current-group()"/>
</xsl:for-each-group>
</Worksheet>
</xsl:template>
<xsl:template match="MYROW">
<ROW>
<CELL>
<xsl:copy-of select="DATA"/>
</CELL>
</ROW>
</xsl:template>
</xsl:transform>
变换
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<MYROW>
<CATEGORYNAME>first</CATEGORYNAME>
<DATA>10</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>second</CATEGORYNAME>
<DATA>20</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>second</CATEGORYNAME>
<DATA>30</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>first</CATEGORYNAME>
<DATA>100</DATA>
</MYROW>
</ROOT>
进入
<?xml version="1.0" encoding="UTF-8"?>
<Worksheet>
<ROW>
<CELL>
<DATA>first</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>10</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>100</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>second</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>20</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>30</DATA>
</CELL>
</ROW>
</Worksheet>
在将 xml 转换为 Excel 的上下文中(如打开 XML)我想按某些类别分组以安排我的输出但显示类别名称为 header.例如:
<MYROW>
<CATEGORYNAME>first</CATEGORYNAME>
<DATA>10</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>second</CATEGORYNAME>
<DATA>20</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>second</CATEGORYNAME>
<DATA>30</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>first</CATEGORYNAME>
<DATA>100</DATA>
</MYROW>
应该转化为:
<ROW>
<CELL>
<DATA>
first
</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>
10
</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>
100
</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>
second
</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>
20
</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>
30
</DATA>
</CELL>
</ROW>
我尝试了 group-by、过滤器、变量,但找不到将按键分组和关联节点放在同一元素(excel 行)下的方法。
我正在使用 altova mapforce。
这是一个简单的分组问题:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes"/>
<xsl:template match="ROOT">
<Worksheet>
<xsl:for-each-group select="MYROW" group-by="CATEGORYNAME">
<ROW>
<CELL>
<DATA>
<xsl:value-of select="current-grouping-key()"/>
</DATA>
</CELL>
</ROW>
<xsl:apply-templates select="current-group()"/>
</xsl:for-each-group>
</Worksheet>
</xsl:template>
<xsl:template match="MYROW">
<ROW>
<CELL>
<xsl:copy-of select="DATA"/>
</CELL>
</ROW>
</xsl:template>
</xsl:transform>
变换
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<MYROW>
<CATEGORYNAME>first</CATEGORYNAME>
<DATA>10</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>second</CATEGORYNAME>
<DATA>20</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>second</CATEGORYNAME>
<DATA>30</DATA>
</MYROW>
<MYROW>
<CATEGORYNAME>first</CATEGORYNAME>
<DATA>100</DATA>
</MYROW>
</ROOT>
进入
<?xml version="1.0" encoding="UTF-8"?>
<Worksheet>
<ROW>
<CELL>
<DATA>first</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>10</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>100</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>second</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>20</DATA>
</CELL>
</ROW>
<ROW>
<CELL>
<DATA>30</DATA>
</CELL>
</ROW>
</Worksheet>