这是我的XML:
<NTC_SECTION_LIGHTLISPRODUCT>
<SECTION_CONTENT_LIST>
<SECTION_CONTENT_LIST_ITEM>
<NTC_LIGHTLISTPRODUCT>
<REGION>17-Mar Tirreno - Italia (Sardegna)</REGION>
<VICINITY>PORTO TORRES</VICINITY>
</NTC_LIGHTLISTPRODUCT>
</SECTION_CONTENT_LIST_ITEM>
<SECTION_CONTENT_LIST_ITEM>
<NTC_LIGHTLISTPRODUCT>
<REGION>12-Mediterraneo Occidentale - Italia (Sardegna)</REGION>
<VICINITY>PORTO MADDALENA</VICINITY>
</NTC_LIGHTLISTPRODUCT>
</SECTION_CONTENT_LIST_ITEM>
<SECTION_CONTENT_LIST_ITEM>
<NTC_LIGHTLISTPRODUCT>
<REGION>17-Mar Tirreno - Italia (Sardegna)</REGION>
<VICINITY>PORTO DI SIRACUSA</VICINITY>
</NTC_LIGHTLISTPRODUCT>
</SECTION_CONTENT_LIST_ITEM>
</SECTION_CONTENT_LIST>
</NTC_SECTION_LIGHTLISPRODUCT>区域e附近的数据和数据被放入一个表中(没有特定的顺序)。
Thi是我的XSLT1.0:
<xsl:for-each select="NTC_SECTION_LIGHTLISPRODUCT">
<xsl:for-each select="SECTION_CONTENT_LIST">
<table>
<tbody>
<xsl:for-each select="SECTION_CONTENT_LIST_ITEM">
<xsl:for-each select="NTC_LIGHTLISTPRODUCT/REGION">
....
</xsl:for-each>
<xsl:for-each select="NTC_LIGHTLISTPRODUCT/VICINITY">
....
</xsl:for-each>
</xsl:for-each>
</tbody>
</table>
</xsl:for-each>
</xsl:for-each>输出中的XSLt创建了一个具有区域和邻域值的唯一表。
我的请求:
I将创建一个新表(由BR/分隔),每次更改REGION -substring-后(REGION,‘-’)的值时,都会创建一个新表(由BR/分隔),以便拥有:
?
PORTO TORRES
?
\x{e76f}PORTO DI SIRACUSA
?
?
\x{e76f}PORTO MADDALENA
?
发布于 2014-10-14 17:03:01
读一读门窗群
在您的例子中,您似乎是按NTC_LIGHTLISTPRODUCT分组(或者您简短地提到了子字符串-)
<xsl:key name="region" match="NTC_LIGHTLISTPRODUCT" use="substring-after(REGION, '-')" />然后,首先获取每个可能出现的NTC_LIGHTLISTPRODUCT的第一个REGION (即不同的区域)。
<xsl:for-each select=".//NTC_LIGHTLISTPRODUCT[generate-id() = generate-id(key('region', substring-after(REGION, '-'))[1])]">然后,只需使用以下键,就可以获得这个“组”中的项(具有相同区域的项):
<xsl:apply-templates select="key('region', substring-after(REGION, '-'))" />试试这个XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes" />
<xsl:key name="region" match="NTC_LIGHTLISTPRODUCT" use="substring-after(REGION, '-')" />
<xsl:template match="NTC_SECTION_LIGHTLISPRODUCT">
<xsl:for-each select=".//NTC_LIGHTLISTPRODUCT[generate-id() = generate-id(key('region', substring-after(REGION, '-'))[1])]">
<h1><xsl:value-of select="substring-after(REGION, '-')" /></h1>
<table>
<xsl:apply-templates select="key('region', substring-after(REGION, '-'))" />
</table>
</xsl:for-each>
</xsl:template>
<xsl:template match="NTC_LIGHTLISTPRODUCT">
<tr>
<td><xsl:value-of select="VICINITY" /></td>
</tr>
</xsl:template>
</xsl:stylesheet>这将产生以下结果:
<h1>Mar Tirreno - Italia (Sardegna)</h1>
<table>
<tr>
<td>PORTO TORRES</td>
</tr>
<tr>
<td>PORTO DI SIRACUSA</td>
</tr>
</table>
<h1>Mediterraneo Occidentale - Italia (Sardegna)</h1>
<table>
<tr>
<td>PORTO MADDALENA</td>
</tr>
</table>https://stackoverflow.com/questions/26364752
复制相似问题