2016-04-25 63 views
1

我试图找到包含多个的使用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相对布局,一个TextView使用id =文本2与ID的ImageView的= IMG1

我想这

//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'] 

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

任何帮助吗?

回答

2

“我想只提取包含ID =文本1,使用id = text2的一个TextView和ID为一个ImageView的= IMG1一个TextView相对布局”

你可以做这种方式(为了便于阅读):

//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[....]