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

如何用XSLT 2.0过滤掉所有属性均为空的元素?

解决方案

你的问题出在matches(., '')这个判断上——正则表达式里的空字符串会匹配任何字符串的任意位置,所以not(matches(., ''))永远为false,自然没法筛选出非空属性。

直接用更直观的方式检查属性值是否非空就行,这里有几种简洁的写法:

写法1:用exists()判断是否存在非空属性

<xsl:if test="exists(@*[string(.) != ''])">
  <!-- 这里写你对有非空属性元素的处理逻辑 -->
</xsl:if>

写法2:直接利用节点集的布尔特性

XPath中,非空的节点集会被判定为true,所以可以简化成:

<xsl:if test="@*[string(.) != '']">
  <!-- 处理逻辑 -->
</xsl:if>

进阶:直接在模板匹配中过滤

如果是要直接忽略所有属性全为空的元素,可以在模板层面处理,不用每个地方写判断:

<!-- 匹配所有属性全为空的元素,直接跳过不处理 -->
<xsl:template match="*[not(@*[string(.) != ''])]"/>

<!-- 正常处理有非空属性的元素 -->
<xsl:template match="*">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()"/>
  </xsl:copy>
</xsl:template>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:15:25