XPath中contains(.,"My Text")与.="My Text"的差异及影响
两个XPath表达式的区别分析
表达式1://button[contains(.,"My Text")]
- 匹配逻辑:检查当前
button元素的**所有文本内容(包含所有后代节点的文本,自动拼接成一个字符串)**中,是否包含"My Text"这个子串 - 适用场景:只要
button内部任何位置(不管是直接文本还是子元素里的文本)有"My Text"这个片段,就会被匹配到。比如:<button>My Text</button><button><span>My Text</span></button><button>Hello My Text World</button><button>Some <b>My</b> <i>Text</i></button>(拼接后是"Some My Text",包含目标子串)
表达式2://button[.="My Text"]
- 匹配逻辑:要求当前
button元素的所有文本内容拼接后,和"My Text"完全一致,不能有多余的字符(包括空格、换行、其他文本片段) - 适用场景:只有当
button的所有文本内容就是"My Text"时才会匹配。比如:- 能匹配:
<button>My Text</button>、<button><span>My Text</span></button>(拼接后是"My Text") - 不能匹配:
<button>Hello My Text</button>(拼接后是"Hello My Text",和目标字符串不一致)、<button>My Text </button>(末尾多了空格)、<button>My<br>Text</button>(拼接后是"MyText",没有空格)
- 能匹配:
针对你提到的场景的影响
当button包含带有"My Text"的后代文本节点时:
- 如果
button的所有文本拼接后只包含"My Text",两个表达式都会匹配到这个button - 如果
button的文本拼接后除了"My Text"还有其他内容(比如前后有额外文字、空格),只有contains的表达式能匹配到,精确匹配的表达式会失败
内容的提问来源于stack exchange,提问作者I.sh.
相关产品推荐
相关产品推荐

