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

如何在XSLT中移除内容重复的mnemonic?给定模板匹配head.block/codes.head

移除XML中重复mnemonic节点的XSLT实现

需求说明

给定输入XML,需移除所有包含重复md.mnem值的grade.content节点,仅保留第一个出现的对应节点,最终输出符合示例要求的结构。

实现代码

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 身份模板:默认复制所有节点和属性 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 定义键,按md.mnem值对grade.content节点分组 -->
    <xsl:key name="mnemGroup" match="grade.content" use="head.block/codes.head/@md.mnem"/>

    <!-- 移除重复节点:仅保留每个md.mnem分组的第一个节点 -->
    <xsl:template match="grade.content[not(generate-id() = generate-id(key('mnemGroup', head.block/codes.head/@md.mnem)[1]))]"/>
</xsl:stylesheet>

代码说明

  1. 身份模板:保证未被特殊规则匹配的节点和属性原样复制,维持XML基础结构完整。
  2. 分组键定义:以codes.head的md.mnem属性值为标识,将同标识的grade.content节点归为一组。
  3. 重复节点过滤:匹配非分组内第一个出现的grade.content节点,不进行复制输出,实现去重效果。

若需要更严格的重复判断(比如结合legacy.identifier和节点内容),可修改键的匹配规则为:

<xsl:key name="mnemGroup" match="grade.content" use="concat(@legacy.identifier, head.block/codes.head/@md.mnem, head.block/codes.head/head.info)"/>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:05:17