带有多个组件的xpath

时间:2016-04-25 11:29:05

标签: android xpath

我正在尝试使用xpath找到包含多个元素的元素,例如

<ListView>
  <RelativeLayout>
    <TextView id=text1></TextView>
    <TextView id=text2></TextView>
    <ImageView id=img1></ImageView>
  </RelativeLayout>
  <RelativeLayout>
    <TextView id=text3></TextView>
    <TextView id=text4></TextView>
    <ImageView id=img2></ImageView>
  </RelativeLayout>
</ListView>

我想只检索包含id = text1的textview的相对布局,id = text2的textview和id = img1的imageview

我试过这个

//ListView/RelativeLayout/TextView[@resource-id='text1'] | 
//ListView/RelativeLayout/TextView[@resource-id='text2'] | 
//ListView/RelativeLayout/ImageView[@resource-id='img1']

这个

//ListView/RelativeLayout/TextView[@resource-id='text1'] and 
//ListView/RelativeLayout/TextView[@resource-id='text2'] and 
//ListView/RelativeLayout/ImageView[@resource-id='img1']

但没有效果。

第一个似乎是一个选择所有包含第一个或第二个或第三个,所以不是同时包含3个。

第二个没有选择任何东西。

我想我应该做一些像

这样的事情
//ListView/RelativeLayout/TextView[@resource-id='text1'] and TextView[@resource-id='text2'] and ImageView[@resource-id='img1']

但我不知道如何正确地写它:/

任何帮助?

1 个答案:

答案 0 :(得分:2)

  

&#34;我想只检索包含带有id = text1的textview的相对布局,带有id = text2的textview和带有id = img1&#34的imageview;

你可以这样做(为了可读性而包装):

//ListView/RelativeLayout[
            TextView/@resource-id='text1' and 
            TextView/@resource-id='text2' and 
            ImageView/@resource-id='img1'
          ]

或者更接近上一次尝试的XPath:

//ListView/RelativeLayout[
            TextView[@resource-id='text1'] and 
            TextView[@resource-id='text2'] and 
            ImageView[@resource-id='img1']
          ]

请注意,主路径中的最后一个元素是XPath返回的元素,在这种情况下,它应该是/RelativeLayout,如请求的那样。还要注意谓词表达式([...])应用于左侧的上下文节点,因此上面两个XPath中的外部谓词应用于RelativeLayout,因为表单为/RelativeLayout[....]