0

我无法创建 XSLT 来做一些我认为应该很简单的事情......

给定以下 XML:

<DATA_DS>
<LIST_ITEMS>
    <ITEMS>
        <abc>2011</abc>
        <def>ABC Company</def>
        <value>23</value>
    </ITEMS>
    <ITEMS>
        <abc>2011</abc>
        <def>ABC Company 1</def>
        <value>11</value>
    </ITEMS>    
    <ITEMS>
        <abc>2010</abc>
        <def>ABC Company 2</def>
        <value>15</value>
    </ITEMS>            
    <ITEMS>
        <abc>2010</abc>
        <def>ABC Company 3</def>
        <value>6</value>
    </ITEMS>
    <ITEMS>
        <abc>2010</abc>
        <def>ABC Company 4</def>
        <value>44</value>
    </ITEMS>                
</LIST_ITEMS></DATA_DS>

我将如何使用 XSLT 将其转换为如下内容:

<table>
    <row>23</row>
    <row>11</row>
</table>

<table>
    <row>15</row>
    <row>6</row>
    <row>44</row>
</table>

这个想法是每次遇到新的“abc”时创建一个新的“表”

4

1 回答 1

1

在 xslt 2.0for-each-group中,您正在寻找指令。

跟随样式表

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:output method="xml" encoding="UTF-8" indent="yes" />

    <xsl:template match="/">
        <output>
            <xsl:for-each-group select="DATA_DS/LIST_ITEMS/ITEMS" group-by="abc">
                <table>
                    <xsl:for-each select="current-group()">
                        <row>
                            <xsl:value-of select="current()/value" />
                        </row>
                    </xsl:for-each>
                </table>
            </xsl:for-each-group>
        </output>
    </xsl:template>
</xsl:stylesheet>

产生输出

<?xml version="1.0" encoding="UTF-8"?>
<output>
    <table>
        <row>23</row>
        <row>11</row>
    </table>
    <table>
        <row>15</row>
        <row>6</row>
        <row>44</row>
    </table>
</output>
于 2013-07-03T06:02:30.343 回答