Xml 如何在xslt中从表中删除最后一行

Xml 如何在xslt中从表中删除最后一行,xml,xslt,Xml,Xslt,我有一个家庭作业,要求我从xml中获取所有数据,并将其显示到一个表中,该表显示一个带有“td”Titulo、Autor、año的“th”。 这个“th”必须每5行重复一次,但是如果最后一行不包含xml中的任何数据,那么这个“th”不应该出现在最后一行 XML的代码: 拉维达·埃斯特恩·奥特拉·帕特酒店 米兰·昆德拉 潘塔莱翁酒店 马里奥·巴尔加斯·略萨 卡特拉尔对话会 马里奥·巴尔加斯·略萨 拉维达·埃斯特恩·奥特拉·帕特酒店 米兰·昆德拉 潘塔莱翁酒店 马里奥·巴尔加斯·略萨 卡特拉尔对话会

我有一个家庭作业,要求我从xml中获取所有数据,并将其显示到一个表中,该表显示一个带有“td”Titulo、Autor、año的“th”。 这个“th”必须每5行重复一次,但是如果最后一行不包含xml中的任何数据,那么这个“th”不应该出现在最后一行

XML的代码:

拉维达·埃斯特恩·奥特拉·帕特酒店
米兰·昆德拉
潘塔莱翁酒店
马里奥·巴尔加斯·略萨
卡特拉尔对话会
马里奥·巴尔加斯·略萨
拉维达·埃斯特恩·奥特拉·帕特酒店
米兰·昆德拉
潘塔莱翁酒店
马里奥·巴尔加斯·略萨
卡特拉尔对话会
马里奥·巴尔加斯·略萨
拉维达·埃斯特恩·奥特拉·帕特酒店
米兰·昆德拉
潘塔莱翁酒店
马里奥·巴尔加斯·略萨
卡特拉尔对话会
马里奥·巴尔加斯·略萨
卡特拉尔对话会
马里奥·巴尔加斯·略萨

这是我的xsl代码:



藏书馆


提特罗 自动 阿诺 提特罗 自动 阿诺


我想它需要一个xsl:if last()=“th”不会显示,但我搜索了几个小时却找不到解决方案,或者如果我找到了,我没有理解,因为它们太复杂了,没有理解代码(我正在学习)。

您没有发布预期结果,所以我在这里有点猜测

如果要在每5行数据之后重复标题行,那么最简单的解决方案IMHO是将其置于5行组中第一行的每一行之前:

XSLT1.0

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/biblioteca">
    <html>
        <body>
            <h1>Biblioteca</h1>
            <table border="1"> 
                <xsl:variable name="header-row">
                    <tr>
                        <th>Titulo</th>
                        <th>Autor</th>
                        <th>Año</th>
                    </tr>
                </xsl:variable>  
                <xsl:for-each select="libro[position() mod 5 = 1]"> 
                    <xsl:copy-of select="$header-row"/>  
                    <xsl:for-each select=". | following-sibling::libro[position() &lt; 5]"> 
                        <tr>
                            <td>
                                <xsl:value-of select="titulo"/>
                            </td>
                            <td>
                                <xsl:value-of select="autor"/>
                            </td>
                            <td>
                                <xsl:value-of select="fechaPublicacion/@año"/>
                            </td>              
                        </tr> 
                    </xsl:for-each>
                </xsl:for-each>
            </table> 
        </body>    
    </html>
</xsl:template>  

</xsl:stylesheet>

藏书馆
提特罗
自动
阿诺
应用于XML示例,将产生:


谢谢迈克尔,这正是我想要的。我的问题首先是我不知道如何很好地使用xPath,因为我们用来学习xPath的那本书是无用的,没有解释任何关于它的内容,我的第二个问题是我不知道搜索什么来解决它,因为我在网上找到的所有信息对我的水平来说都太具体、太先进了。我非常感谢你
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" encoding="UTF-8"/>
  <xsl:template match="/">
    <html>
      <head>
        <link rel="stylesheet" type="text/css" href="estilo.css"/>
      </head>
      <body>
        <h1>Biblioteca</h1>
        <hr style="text-align:left;"/>
        <br/>
        <table>   
          <tr id="s" bgcolor="#FFB6C1">
            <th>Titulo</th>
            <th>Autor</th>
            <th>Año</th>
          </tr>
          <xsl:for-each select="biblioteca/libro">                     
            <tr>
            <td><xsl:value-of select="titulo"/></td>
            <td><xsl:value-of select="autor"/></td>
            <td><xsl:value-of select="fechaPublicacion/@año"/></td>              
            </tr> 
            <xsl:if test="position() mod 5 = 0">
              <tr  bgcolor="#FFB6C1">
                <th>Titulo</th>
                <th>Autor</th>
                <th>Año</th>
               </tr>
            </xsl:if>            
          </xsl:for-each>
        </table> 
      </body>    
    </html>
  </xsl:template>  
</xsl:stylesheet> 
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/biblioteca">
    <html>
        <body>
            <h1>Biblioteca</h1>
            <table border="1"> 
                <xsl:variable name="header-row">
                    <tr>
                        <th>Titulo</th>
                        <th>Autor</th>
                        <th>Año</th>
                    </tr>
                </xsl:variable>  
                <xsl:for-each select="libro[position() mod 5 = 1]"> 
                    <xsl:copy-of select="$header-row"/>  
                    <xsl:for-each select=". | following-sibling::libro[position() &lt; 5]"> 
                        <tr>
                            <td>
                                <xsl:value-of select="titulo"/>
                            </td>
                            <td>
                                <xsl:value-of select="autor"/>
                            </td>
                            <td>
                                <xsl:value-of select="fechaPublicacion/@año"/>
                            </td>              
                        </tr> 
                    </xsl:for-each>
                </xsl:for-each>
            </table> 
        </body>    
    </html>
</xsl:template>  

</xsl:stylesheet>