xslt 1.0按节点属性分组并输出为html

xslt 1.0按节点属性分组并输出为html,html,xml,xslt,Html,Xml,Xslt,我已经搜索了stackoverflow,但不知何故没有找到适合我的示例。谈到xslt,我不是特别熟练。我想转换给定的XML: <ROOT> <LIST id="1" name="list1"> <ITEM rowNumber="1" data="list1row1" name="firstRow"> </ITEM> <ITEM rowNumber="2" data="list1row2"

我已经搜索了stackoverflow,但不知何故没有找到适合我的示例。谈到xslt,我不是特别熟练。我想转换给定的XML:

<ROOT>
    <LIST id="1" name="list1">
        <ITEM rowNumber="1" data="list1row1" name="firstRow">
        </ITEM>
        <ITEM rowNumber="2" data="list1row2" name="secondRow">
        </ITEM>
        <ITEM rowNumber="3" data="list1row3" name="thirdRow">
        </ITEM>
    </LIST>
    <LIST id="2" name="list2">
        <ITEM rowNumber="1" data="list2row1" name="firstRow">
        </ITEM>
        <ITEM rowNumber="2" data="list2row2" name="secondRow">
        </ITEM>
        <ITEM rowNumber="3" data="list2row3" name="thirdRow">
        </ITEM>
    </LIST>
    <LIST id="3" name="list3">
        <ITEM rowNumber="1" data="list3row1" name="firstRow">
        </ITEM>
        <ITEM rowNumber="2" data="list3row2" name="secondRow">
        </ITEM>
        <ITEM rowNumber="3" data="list3row3" name="thirdRow">
        </ITEM>
    </LIST>
</ROOT>

进入此HTML:

<table>
    <tr>
        <td>1</td>
        <td>firstRow</td>
        <td id="list1_row1">list1row1</td>          
        <td id="list2_row1">list2row1</td>          
        <td id="list3_row1">list3row1</td>
    </tr>
    <tr>
        <td>2</td>
        <td>secondRow</td>
        <td id="list1_row2">list1row2</td>          
        <td id="list2_row2">list2row2</td>          
        <td id="list3_row2">list3row2</td>
    </tr>
    <tr>
        <td>3</td>
        <td>thirdRow</td>
        <td id="list1_row3">list1row3</td>          
        <td id="list2_row3">list2row3</td>          
        <td id="list3_row3">list3row3</td>
    </tr>
</table>

1.
第一排
清单1如箭头1所示
列表2Row1
列表3行1
2.
第二排
列表1如箭头2所示
列表2Row2
列表3Row2
3.
蒂德罗
清单1如箭头3所示
列表2如箭头3所示
列表3row3
所以我想把所有的行组合成一个表行,单元格中包含行号、名称和数据。如果行号和名称是隐藏单元格,则可以

我正在考虑使用
检查是否显示元数据(行号和名称)。单元格的ID来自列表名(或ID)和行号(因此可以使用javascript进行搜索)


提前感谢您的帮助

假设每个列表的项目数(即行数)完全相同,请尝试以下方法:

XSLT1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:key name="item-by-row" match="ITEM" use="@rowNumber"/>

<xsl:template match="/">
    <table>
       <xsl:for-each select="ROOT/LIST[1]/ITEM">
           <tr>
                <td><xsl:value-of select="@rowNumber"/></td>
                <td><xsl:value-of select="@name"/></td>
                <xsl:for-each select="key('item-by-row', @rowNumber)">
                    <td id="{../@name}_row{@rowNumber}"><xsl:value-of select="@data"/></td>    
                </xsl:for-each>
            </tr>
       </xsl:for-each>
    </table>
</xsl:template>

</xsl:stylesheet>

工作起来很有魅力。谢谢你,先生!我还曾经帮助我进一步修改这个例子以适应我的情况。