You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XSLT为每个<bill>元素生成独立表格遇阻求助

解决每个<bill>元素生成独立表格的问题

我帮你排查了下XSLT代码里的问题,主要有两处导致了不符合预期的结果,咱们一步步来修正:

问题分析

  1. 分组逻辑的拼写错误:你在Muenchian分组的判断条件里把generate-id()写成了generate id(少了连字符),这会导致分组判断失效,最终只选中了第一个<bill>元素。
  2. 内层遍历对象错误:你内层的<xsl:for-each>遍历的是分组后的<bill>元素,但每个<bill>下有多个<product>,直接取product/name只会拿到当前<bill>里的第一个产品,自然每个表格只显示一行。

修正后的完整XSLT代码

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:key name="tableByBillDate" match="bill" use="date" />
  
  <xsl:template match="/">
    <html>
      <head>
        <title>HTML Document</title>
      </head>
      <style>
        table {
          font-family: arial, sans-serif;
          border-collapse: collapse;
          width: 100%;
        }
        td, th {
          border: 1px solid #dddddd;
          text-align: left;
          padding: 8px;
        }
        tr:nth-child(even) {
          background-color: #dddddd;
        }
        caption {
          display: table-caption;
          text-align: center;
        }
      </style>
      <body>
        <!-- 调整欢迎语,显示所有学生名字 -->
        <h3>Welcome <xsl:for-each select="group/student"><xsl:value-of select="name"/><xsl:if test="position() != last()">, </xsl:if></xsl:for-each></h3>
        <h3>Group: <xsl:value-of select="group/name"/> </h3>
        <h3>Bills</h3>
        
        <!-- 修复generate-id的拼写错误,确保正确分组 -->
        <xsl:for-each select="group/student/bill[generate-id() = generate-id(key('tableByBillDate', date)[1])]">
          <!-- 按日期降序排序账单 -->
          <xsl:sort select="date" order="descending"/>
          
          <table>
            <caption style="font-weight: bold;">Date: <xsl:value-of select="date"/></caption>
            <tr>
              <th>Name</th>
              <th>Amount</th>
              <th>Cost</th>
              <th>Total</th>
              <th>Participants</th>
            </tr>
            
            <!-- 遍历当前bill下的所有product元素 -->
            <xsl:for-each select="product">
              <tr>
                <td><xsl:value-of select="name"/></td>
                <td><xsl:value-of select="amount"/></td>
                <td><xsl:value-of select="prize"/></td>
                <td>Calculated with Javascript</td>
                <td><xsl:value-of select="participant/id"/></td>
              </tr>
            </xsl:for-each>
          </table>
        </xsl:for-each>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

关键修正点说明

  • 修复了generate id为正确的generate-id(),确保Muenchian分组逻辑正常工作,这样每个不同日期的<bill>都会生成独立的表格。
  • 内层循环从遍历<bill>改为遍历当前<bill>下的所有<product>,这样每个产品都会生成一行表格数据。
  • 额外调整了欢迎语部分,显示所有学生的名字(而不是只显示第一个),你可以根据需求保留或修改这部分。
  • 将账单的排序移到外层循环,确保表格按日期降序排列。

这样运行后,就会为每个<bill>生成一个独立的表格,每个表格里显示对应账单下的所有产品信息啦~

内容的提问来源于stack exchange,提问作者Zast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:38:11