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

XSLT匹配指定属性值复制元素及全部属性的实现问题

问题根因

你当前代码的错误主要有3点:

  1. 错误使用xsl:value-of处理属性:xsl:value-of只会提取节点的文本值,不会复制节点本身,所以Book的所有属性都丢失,仅输出了ID属性的字符串值1。
  2. 没有过滤不需要的Book节点:没有匹配规则处理ID≠1的Book元素。
  3. 缺少通用属性复制逻辑:没有编写属性的匹配处理模板,默认模板会把属性转为纯文本输出,所以Resources的属性也没有被保留为属性节点。

正确实现代码

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <!-- 身份转换模板:默认递归复制所有节点、属性和内容 -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- 空模板:过滤ID不等于1的Book元素,命中后不输出任何内容 -->
  <xsl:template match="Book[not(@ID='1')]"/>
</xsl:stylesheet>

代码说明

  • 身份转换模板不需要你预先声明任何属性名,所有未知的、动态的属性都会被完整保留为节点属性,完全满足你对未声明属性的复制需求。
  • 过滤模板只需要调整匹配条件就可以修改过滤规则,不需要改动其他复制逻辑,扩展性更强。
  • 输出结果完全符合你的预期:保留原XML结构、保留所有原有属性、仅删除ID不等于1的Book元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 18:54:01