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

如何复制存在/不存在特定属性的节点?附现有可用XSL代码

没问题!咱们基于你现有的XSL代码,扩展出按「属性存在/不存在」条件复制节点的功能,分两种常见场景给你详细方案:

场景1:仅复制存在指定属性的节点(同时保留原逻辑只保留该属性)

比如你想只保留带有@Ccy属性的节点,并且复制时仅保留这个属性,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- 匹配所有带有@Ccy属性的节点,执行复制逻辑 -->
<xsl:template match="node()[@Ccy]">
  <xsl:copy copy-namespaces="no">
    <xsl:copy-of select="@Ccy"/> <!-- 仅保留@Ccy属性 -->
    <xsl:apply-templates /> <!-- 递归处理子节点 -->
  </xsl:copy>
</xsl:template>

<!-- 匹配所有不带@Ccy属性的节点,空模板意味着不复制这些节点 -->
<xsl:template match="node()"/>

</xsl:stylesheet>

逻辑说明:

  • 第一个模板用node()[@Ccy]精准匹配带有@Ccy属性的节点,执行你原有的复制+保留属性逻辑;
  • 第二个通用空模板会匹配所有其他节点(不带@Ccy的),因为没有输出逻辑,这些节点会被过滤掉。

场景2:仅复制不存在指定属性的节点

如果需求反过来,只保留不带@Ccy属性的节点,代码只需调整匹配条件:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>

<!-- 匹配所有不带@Ccy属性的节点,执行复制逻辑 -->
<xsl:template match="node()[not(@Ccy)]">
  <xsl:copy copy-namespaces="no">
    <xsl:copy-of select="@Ccy"/> <!-- 因为节点不带@Ccy,这里不会复制任何属性 -->
    <xsl:apply-templates /> <!-- 递归处理子节点 -->
  </xsl:copy>
</xsl:template>

<!-- 匹配所有带有@Ccy属性的节点,空模板意味着不复制这些节点 -->
<xsl:template match="node()[@Ccy]"/>

</xsl:stylesheet>

灵活调整提示:

  • 如果要针对其他属性(比如@Id、@Name)筛选,只需把代码中的@Ccy替换为目标属性名即可;
  • 要是需要修改属性保留规则(比如保留多个属性),只需调整<xsl:copy-of select="...">的内容,比如<xsl:copy-of select="@Ccy | @Id">就能同时保留@Ccy和@Id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:14:05