如何使用XPath 1.0提取文本内容的最后一个单词
问题原因
你之前编写的表达式仅完成了「筛选文本末尾为PT的Example节点」的逻辑,后续直接返回了节点完整文本,没有做截取最后一个单词的操作。
解决方案
XPath 1.0没有内置字符串分割函数,我们可以通过字符串长度计算、字符替换组合实现通用的最后一个单词提取逻辑,同时兼容空格、短横线两种分隔符场景:
通用提取逻辑(任意节点文本最后一个单词,兼容多单词、混合分隔符)
substring( normalize-space(translate(目标节点路径, '-', ' ')), string-length( translate( normalize-space(translate(目标节点路径, '-', ' ')), ' ', '' ) ) + 1 )
对应场景的具体表达式
如果不需要筛选,直接提取Ctry节点文本最后一个单词:
substring( normalize-space(translate(//Ctry, '-', ' ')), string-length( translate( normalize-space(translate(//Ctry, '-', ' ')), ' ', '' ) ) + 1 )
如果需要先筛选出文本末尾为PT的Example节点再提取:
substring( normalize-space(translate(//Example[substring(normalize-space(.), string-length(normalize-space(.)) - string-length('PT') + 1) = 'PT']/Ctry, '-', ' ')), string-length( translate( normalize-space(translate(//Example[substring(normalize-space(.), string-length(normalize-space(.)) - string-length('PT') + 1) = 'PT']/Ctry, '-', ' ')), ' ', '' ) ) + 1 )
原理解释
translate(目标节点, '-', ' '):将文本中所有短横线替换为空格,统一分隔符格式normalize-space(...):去除首尾空白,将连续空白统一为单个空格,得到规整字符串Stranslate(S, ' ', ''):删除S中所有空格,得到无分隔符的字符串T- 字符串S的长度减去T的长度就是S中空格的总数量,
substring(S, string-length(T)+1)就是从最后一个空格的下一位开始截取,正好得到最后一个单词。
内容的提问来源于stack exchange,提问作者Joana Pinto
相关产品推荐
相关产品推荐

