2016-04-25 62 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[....]