0

在将 xml 转换为 Excel(作为开放 XML)的上下文中,我想按一些类别进行分组以安排我的输出,但将类别名称显示为标题。例如:

<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>

我尝试了分组、过滤器、变量,但找不到将按键分组和关联节点放在同一元素(在我的情况下为 excel 行)下的方法。

我正在使用 altova mapforce。

4

1 回答 1

0

这是一个简单的分组问题:

<?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>

在线http://xsltransform.net/pPzifp8

于 2015-11-04T10:57:35.783 回答