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

如何使用XPath从字符串中提取两个数字

当然有靠谱的解决方案!根据你的Schematron环境支持的XPath版本,有两种常用的处理方式:

方案1:XPath 2.0及以上版本(推荐)

XPath 2.0+自带的tokenize()函数可以轻松按分隔符拆分字符串,完美适配这种宽x高格式的分辨率:

  • 提取宽度(第一个数字):
    tokenize(//resolution/text(), 'x')[1] cast as xs:integer?
    
  • 提取高度(第二个数字):
    tokenize(//resolution/text(), 'x')[2] cast as xs:integer?
    

简单解释:tokenize()会把分辨率文本按x分割成一个字符串序列,[1]和[2]分别取序列里的第一个、第二个元素,cast as xs:integer?则把字符串转换为整数(末尾的?是为了在转换失败时返回空值,避免直接报错)。

方案2:兼容XPath 1.0的方案

如果你的Schematron环境只支持XPath 1.0,也可以用基础字符串函数组合实现:

  • 提取宽度:
    number(substring-before(//resolution/text(), 'x'))
    
  • 提取高度:
    number(substring-after(//resolution/text(), 'x'))
    

这里substring-before()用来获取x之前的宽度字符串,substring-after()获取x之后的高度字符串,再用number()把它们转换成数值类型。

在Schematron中实际使用示例

比如你想验证分辨率是否符合1920x1080及以上的要求,可以写这样的规则:

<sch:pattern>
  <sch:rule context="resolution">
    <sch:assert test="number(substring-before(text(), 'x')) >= 1920">
      宽度必须至少为1920,当前值为<sch:value-of select="substring-before(text(), 'x')"/>
    </sch:assert>
    <sch:assert test="number(substring-after(text(), 'x')) >= 1080">
      高度必须至少为1080,当前值为<sch:value-of select="substring-after(text(), 'x')"/>
    </sch:assert>
  </sch:rule>
</sch:pattern>

如果是XPath 2.0环境,直接把断言里的表达式替换成tokenize()版本的写法就可以了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:13:40