XPath中*/是什么含义?为何指定XPath仅选中对应android.view.ViewGroup节点?
1. XPath语法中
*/的含义 */是XPath路径语法的组合,具体定义如下:
*是节点通配符,匹配当前上下文节点的所有直接子节点,不限制节点名称、类型/是路径分隔符,用于连接上下层级的节点规则
二者组合后*/的实际作用是:匹配当前上下文节点的孙辈节点层级,也就是跳过当前节点的直接子节点,匹配直接子节点的下一级所有节点。
2. XPath仅选中指定节点的原因
你使用的XPath语句为:
//android.view.ViewGroup[*/android.widget.TextView[@androidXtext='Microwaves']]
该语句的筛选规则是:查找全局所有android.view.ViewGroup节点,要求该节点的孙辈节点中,存在androidXtext属性值为Microwaves的android.widget.TextView节点。
结合你提供的布局层级,从目标TextView往上追溯的节点链为:
目标TextView → 直接父节点(无ID的第三层ViewGroup) → 祖父节点(@ucl.flex-row对应的第二层ViewGroup) → 曾祖父节点(最外层第一层ViewGroup)
对应筛选规则逐一验证各层级ViewGroup:
- 最外层第一层ViewGroup:它的孙辈是第三层ViewGroup,不存在符合要求的TextView,不满足条件
- 第二层
@ucl.flex-row对应的ViewGroup:它的孙辈就是目标TextView,完全匹配筛选规则,因此被选中 - 第三层无ID的ViewGroup:它的直接子节点就是目标TextView,要符合
*/规则需要它的孙辈存在目标TextView,显然不满足 - 其余更深层级的ViewGroup:节点路径完全无法触达目标TextView,自然不满足条件
因此只有带@ucl.flex-row标识的ViewGroup会被选中,其余同类型节点均不匹配层级要求。
内容的提问来源于stack exchange,提问作者lfreedoml
相关产品推荐
相关产品推荐

