如何编写包含 及SVG标签的元素的XPath?多次尝试无效
解决带空格与SVG子元素的span定位问题
可行的XPath写法
- 优先推荐:
//span[contains(normalize-space(.), 'Database')]
这个方法会自动处理所有空白字符(包括 ),同时忽略span内部的子元素(比如SVG),只要整个span的文本内容里包含"Database"就能匹配到。 - 精准筛选带SVG的目标span:
//span[.//svg and contains(., 'Database')]
先限定span必须包含SVG子元素,再匹配文本里有"Database"的,避免误匹配其他不含SVG的span。 - 按文本节点位置定位:
//span[text()[last()][contains(., 'Database')]]
如果"Database"是span最后一段直接文本(前面是空格和SVG),可以用这个写法精准定位对应的文本节点。
之前写法失效的原因
//span[contains(text(),'Database')]:text()只会取span的直接文本节点,因为中间插了SVG,文本被拆成了多段,这个写法只能匹配第一段文本里有"Database"的情况,自然找不到目标。//span[ends-with(., 'Database')]:多数浏览器用的是XPath 1.0,不支持ends-with这个函数,所以直接失效。//span[text()='\u00A0\u00A0Database']:同样因为SVG把文本拆成了多个节点,整个span没有一个完整的文本节点等于\u00A0\u00A0Database,匹配失败。//span[contains(., '\u00A0\u00A0Database')]:可能实际页面里的空白不是标准的两个\u00A0,或者SVG的存在导致文本拼接后和预期不符,用normalize-space()能规避这类空白问题。
内容的提问来源于stack exchange,提问作者Nandan N
相关产品推荐
相关产品推荐

