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

如何使用XSLT按指定条件查找匹配元素,按长度和数值取最大值

问题原因
  • 你现有代码中$list变量的XPath表达式是布尔比较逻辑,所以运行后只会返回true/false,而非你需要的节点值
  • 缺少第二步筛选逻辑:没有先过滤出所有长度等于最大长度的元素,再从中提取数值最大的目标元素
修复后的完整XSLT代码
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="#all"
    version="3.0">

  <xsl:mode on-no-match="shallow-copy"/>

  <xsl:template match="root">
    <!-- 计算最大字符串长度 -->
    <xsl:variable name="maxLength" select="max(data/label.designator/string-length(.))" as="xs:integer"/>
    Max string length is: <xsl:value-of select="$maxLength"/><br/>
    
    <!-- 筛选符合要求的目标值 -->
    <xsl:variable name="targetValue">
      <xsl:for-each select="data/label.designator[string-length(.) = $maxLength]">
        <!-- 去掉末尾的点转成数值后降序排序 -->
        <xsl:sort select="xs:decimal(replace(., '\.$', ''))" order="descending" data-type="number"/>
        <xsl:if test="position() = 1">
          <xsl:value-of select="."/>
        </xsl:if>
      </xsl:for-each>
    </xsl:variable>
     and value is : <xsl:value-of select="$targetValue"/>
  </xsl:template>
  
</xsl:stylesheet>
逻辑说明
  • 直接用XPath 3.0的max()函数计算所有label.designator的最大字符串长度,比循环写法更简洁
  • 先过滤出所有字符串长度等于最大长度的节点,再将节点内容去掉末尾的.转换为十进制数值,按降序排序后取第一个,就是同时满足长度最长、数值最大的目标元素
  • 运行后输出完全匹配你给出的预期结果

内容的提问来源于stack exchange,提问作者Sai Prasad Mukthapuram

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:15:04