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

是否可以使用XSLT 1.0对XML中的entry条目按客户字段分组展示?

解决方案

你要的功能可以通过XSLT 1.0标准的Muenchian分组法实现,无需硬编码客户名称,完全适配你的需求:

完整XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 定义分组键:按customer字段分组entry节点 -->
    <xsl:key name="customerGroup" match="entry" use="customer" />

    <xsl:output method="text" encoding="UTF-8" />
    <xsl:strip-space elements="*" />

    <xsl:template match="/data">
        <!-- 遍历所有唯一客户(每个客户只取第一个出现的entry节点) -->
        <xsl:for-each select="entry[generate-id() = generate-id(key('customerGroup', customer)[1])]">
            <!-- 输出客户名称 -->
            <xsl:value-of select="customer" />:
            <xsl:text>&#10;</xsl:text>
            <!-- 遍历当前客户的所有订单条目 -->
            <xsl:for-each select="key('customerGroup', customer)">
                <xsl:text>    </xsl:text>
                <xsl:value-of select="sku" />
                <xsl:text> </xsl:text>
                <xsl:value-of select="desc" />
                <xsl:text>&#10;</xsl:text>
            </xsl:for-each>
            <!-- 不同客户之间加空行 -->
            <xsl:text>&#10;</xsl:text>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

输出效果

和你要求的完全一致:

Acme:
    123123 Name Of First Product
    789789 Name Of Third Product

GeneriCo:
    456456 Name Of Second Product

使用说明

  • 代码无需修改即可直接适配你现有的XML结构,即使后续新增客户也不需要调整代码
  • 之前浏览器打开无输出大概率是示例未设置输出格式为text,或者XML和XSLT的关联配置错误,你可以在XML文件头部加上如下关联语句后直接在浏览器打开:
<?xml-stylesheet type="text/xsl" href="你的xsl文件名.xsl"?>
  • 如果是服务端处理,直接用WAMP自带的XSLT1.0处理器调用即可正常输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:57:03