Working with axis XSLT 1.0



这是我的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>

相关内容

  • 没有找到相关文章

最新更新