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

如何在XPath查询中动态处理带数字前缀的产品节点获取描述

直接在XPath中动态处理带数字前缀的产品编码查询

先看你给出的产品XML结构——每个产品对应一个以编码命名的子节点,数字开头的编码会被自动添加下划线前缀:

<products> 
  <C8TJM> 
    <code>C8TJM</code> 
    <name>Product</name> 
    <description>Product description</description> 
  </C8TJM> 
  <D75KF> 
    <code>D75KF</code> 
    <name>Product</name> 
    <description>Product description</description> 
  </D75KF> 
  <_89TJX> 
    <code>89TJX</code> 
    <name>Product</name> 
    <description>Product description</description> 
  </_89TJX> 
</products>

你的需求是不用额外定义变量,直接在XPath里完成「判断编码是否以数字开头→按需加下划线前缀→定位节点取description」的完整逻辑,我来给你两种适配不同XSLT版本的写法:


适配XSLT 2.0+的写法

直接用XPath的if表达式嵌入判断逻辑,写法更直观:

/products/*[local-name() = (if (contains('0123456789', substring($productCode, 1, 1))) then concat('_', $productCode) else $productCode)]/description/text()

逻辑拆解:

  • contains('0123456789', substring($productCode, 1, 1)):检查产品编码首字符是否为数字
  • 用if/else动态生成带前缀(如果需要)的节点名称
  • 通过local-name()匹配对应的产品节点,最终取出description的文本内容

适配XSLT 1.0的写法

因为XSLT 1.0不支持if表达式,我们可以用字符串拼接的技巧实现相同效果:

/products/*[local-name() = concat(
  substring('_', 1, number(contains('0123456789', substring($productCode, 1, 1)))),
  $productCode
)]/description/text()

逻辑拆解:

  • number(contains(...))会返回1(条件成立,首字符是数字)或0(条件不成立)
  • 当条件成立时,substring('_',1,1)会取出下划线;不成立时取空字符串
  • 最终拼接出正确的节点名称,完成匹配和内容提取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:52:53