我已经为此搜索了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>
所以我想把所有行和它们组合在一个表行中,单元格包含行号,名称和数据。如果rowNumber和name是隐藏的单元格,则可以。
我在考虑使用<xsl:if test="position() = 1">
来检查是否显示元数据(行号和名称)。单元格将具有来自列表名称(或id)和行号的ID(因此可以使用javascript搜索它们)。
提前感谢您的帮助!
答案 0 :(得分:2)
假设每个LIST具有完全相同数量的ITEMS(即行),请尝试这种方式:
XSLT 1.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>