这是我的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附近的这些数据和其他数据被放入一个表中(没有特定的顺序)。
这是我的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创建了一个值为Region和Vicinity的UNIQUE TABLE。
我的请求:
每次更改REGION的值(REGION,'-'之后的子字符串)时,我都会创建一个新表(用BR/分隔),以便具有:
|-------------------------------|
|TORRES港
|-------------------------------|
|西拉库萨港
|-------------------------------|
|-------------------------------|
|马德莱纳港
|-------------------------------|
阅读Muenchian Grouping
在您的情况下,看起来您正在用REGION
(或者您简要提到的"-"之后的子字符串)对NTC_LIGHTLISTPRODUCT
进行分组
<xsl:key name="region" match="NTC_LIGHTLISTPRODUCT" use="substring-after(REGION, '-')" />
然后,您将首先获取每个可能的REGION
(即不同区域)的第一次出现的每个NTC_LIGHTLISTPRODUCT
<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>