如何用单条XPath提取以冒号或连字符分隔的颜色值?
解决XPath提取多分隔符子串的问题
针对你的表格结构,要合并提取两种分隔符后的颜色值,这里提供两种可行的XPath方案,都能直接输出blue和green:
方案1:条件判断提取(兼容XPath 2.0+)
利用if-else逻辑匹配不同分隔符,精准提取对应子串:
//tr/td/text()[contains(., ':') or contains(., '-')]/(if(contains(., ': ')) then substring-after(., ': ') else substring-after(., '- '))
- 先通过
contains筛选出包含冒号或连字符的文本节点,排除不需要的jasmine flower行 - 再根据文本包含的分隔符类型,分别用
substring-after提取分隔符(含后续空格)后的内容
方案2:正则替换提取(更简洁)
用replace函数直接替换掉前缀部分,保留颜色值:
//tr/td/text()[contains(., ':') or contains(., '-')]/replace(., '^color[:-] ', '')
- 正则
^color[:-]匹配开头的color+ 冒号/连字符 + 空格,将这部分替换为空,直接得到颜色值
为什么你之前的尝试不生效?
//tr/td/[substring-after(text(),':') or substring-after(text(),'-')]:这是给td加谓语筛选,返回的是符合条件的td元素,不是提取后的子串//tr/td/text()[substring-after(.,':') or substring-after(.,'-')]:只是筛选出符合条件的文本节点,但返回的是整个文本内容,没有做子串提取
内容的提问来源于stack exchange,提问作者raghava narasimman
相关产品推荐
相关产品推荐

