XSLT移除XML节点的核心是身份转换加空模板:先用默认复制全部,再为要删除的节点(如temp、debug)定义空模板match="temp|debug";支持条件删除,如match="item[status='draft']";空模板会彻底移除匹配节点及其子树。
用XSLT移除XML中的某些节点,核心思路是:写一个“身份转换”(identity transform)作为基础,再为要删除的节点提供空模板(即匹配但不输出任何内容)。这样,其他节点照常复制,目标节点被静默忽略。
这是最常用、最可靠的方式。先用 或递归 复制所有内容,再针对要删除的节点定义空模板。
或 )单独写
不只是删固定名称的节点,还能根据属性、值或位置动态决定是否删除。用 match 中的谓词表达式即可。
status 值为 "draft" 的 
:
id 属性的 :
:
空模板会同时移除匹配节点及其所有后代,不需要额外处理子节点。但如果只想删内容、保留标签(比如清空文本但留空元素),就不能用空模板,而应改用带 但不应用子模板的写法。
match="price" → 整个 99.9 消失 → 变成 或
后加
调试时可先用 输出被匹配的节点,确认模板是否生效;生产环境建议用 XSLT 2.0+ 的 exclude-result-prefixes 清理冗余命名空间。
[REMOVED],看是否出现标记match="meta|script|style|comment()"(连注释也删)priority 解决模板冲突,例如当通用模板和具体模板都可能匹配时