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

XSLT 3.0中用XPath统计type=1且status=2的card节点求助

解决XSLT统计符合条件的card节点数量问题

我来帮你搞定这个统计需求!先梳理下你现有代码里的问题,再给你适配XSLT 3.0的解决方案。

原代码的问题

你的XPath表达式存在语法错误://card/[Prop[@prop_name='type' and @val='1'] and Prop[@prop_name='status' and @val='2']] 里的card/[多了一个斜杠,正确的写法应该是card[。另外你的XSLT声明的是1.0版本,而你需要使用3.0,所以首先要更新stylesheet的版本声明。

修正后的XSLT 3.0代码

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" encoding="UTF-8" indent="yes" omit-xml-declaration="yes" />
    <xsl:strip-space elements="*"/>
    
    <xsl:template match="/">
        <!-- 修正XPath语法,统计符合条件的card数量 -->
        <xsl:variable name="nb_active_cards" 
            select="count(//card[Prop[@prop_name='type' and @val='1'] and Prop[@prop_name='status' and @val='2']])"/>
        <xsl:value-of select="$nb_active_cards" />
    </xsl:template>
</xsl:stylesheet>

代码说明

  • 版本适配:将<xsl:stylesheet>的version属性改为3.0,XSLT 3.0完全兼容1.0的核心语法,同时支持更多新特性。
  • XPath逻辑:修正后的表达式会筛选出同时满足以下两个条件的card节点:
    1. 包含一个Prop子节点,其prop_name属性值为type且val属性值为1
    2. 包含一个Prop子节点,其prop_name属性值为status且val属性值为2
  • 结果验证:针对你的source.xml,符合条件的是编号为0003和0004的两个card,所以最终输出结果为2。

额外优化(XSLT 3.0特性)

如果你想利用XSLT 3.0的简化写法,也可以直接在输出中计算,省略变量(效果完全一致):

<xsl:template match="/">
    <xsl:value-of select="count(//card[Prop[@prop_name='type' and @val='1'] and Prop[@prop_name='status' and @val='2']])" />
</xsl:template>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:52:38