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

如何基于子节点值用XSLT生成多个独立订单表格?

按订单生成独立表格并按ID降序的XSLT实现

原代码的问题在于直接遍历所有item节点并尝试按日期分组,导致所有商品被合并到单个表格中。要实现每个订单一个独立表格、按订单ID(oid)降序排列的需求,需要调整遍历对象为order节点,为每个订单单独生成表格,并在表格内展示订单信息和对应商品。

正确的XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>
    
    <xsl:template match="/">
        <html>
            <head>
                <style>
                    table {
                        border-collapse: collapse;
                        width: 80%;
                        margin: 20px 0;
                        font-family: Arial, sans-serif;
                    }
                    th, td {
                        border: 1px solid #ddd;
                        padding: 8px;
                        text-align: left;
                    }
                    th {
                        background-color: #f2f2f2;
                    }
                    .order-header {
                        background-color: #e6f2ff;
                        font-weight: bold;
                    }
                </style>
            </head>
            <body>
                <!-- 遍历所有order节点,按oid数值降序排列 -->
                <xsl:for-each select="//order">
                    <xsl:sort select="@oid" data-type="number" order="descending"/>
                    
                    <!-- 为每个订单生成独立表格 -->
                    <table>
                        <!-- 订单信息行,合并三列 -->
                        <tr class="order-header">
                            <td colspan="3">
                                订单ID: <xsl:value-of select="@oid"/> | 订单日期: <xsl:value-of select="date"/>
                            </td>
                        </tr>
                        <!-- 表头行 -->
                        <tr>
                            <th>商品编号</th>
                            <th>商品描述</th>
                            <th>数量</th>
                        </tr>
                        <!-- 遍历当前订单下的所有商品 -->
                        <xsl:for-each select="item">
                            <tr>
                                <td><xsl:value-of select="@iid"/></td>
                                <td><xsl:value-of select="description"/></td>
                                <td><xsl:value-of select="qty"/></td>
                            </tr>
                        </xsl:for-each>
                    </table>
                </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

关键调整说明

  • 遍历对象变更:将遍历对象从//order/item改为//order,确保每个订单对应一个独立表格。
  • 排序逻辑修正:直接对order节点的@oid属性按数值类型降序排序,保证订单从大到小排列。
  • 订单信息展示:添加合并列的表头行,显示当前订单的ID和日期,增强表格可读性。
  • 商品行生成:在每个订单表格内部,遍历当前订单下的item节点,生成对应商品数据行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:55:21