2016-04-25 14 views
1

Ich versuche, ein Element zu finden, die zum Beispiel mehrere diejenigen mit XPath enthaltenXPath mit mehreren Komponenten

<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> 

Ich mag würde nur die relative Layout abzurufen, die eine Textview mit id = text1 enthält, ein Textview mit id = text2 und einem Imageview mit id = img1

ich versucht, dieses

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

und dieses

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

Aber keiner funktioniert.

Die erste scheint zu wählen alle, die die 1. ODER die 2. ODER die 3. so nicht eins mit den 3 zur gleichen Zeit enthalten.

Der zweite wählt nichts aus.

Ich glaube, ich sollte

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

wie

etwas tun, aber ich weiß nicht, wie man richtig schreiben:/

Jede Hilfe?

Antwort

2

"Ich möchte nur die relative Layout abzurufen, die eine Textview mit id = text1 enthält eine Textview mit id = text2 und einem Imageview mit id = img1"

Sie können tun, auf diese Weise (zur besseren Lesbarkeit umgebrochen):

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

oder alternativ etwas näher an Ihrem letzten Versuch XPath:

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

Beachten Sie, dass das letzte Element im Hauptpfad das Element ist, das vom XPath zurückgegeben würde. In diesem Fall sollte es /RelativeLayout sein, wie angefordert. Beachten Sie auch, dass der Prädikatausdruck ([...]) auf den Kontextknoten auf der linken Seite angewendet wird, sodass das äußere Prädikat in den beiden oben angegebenen XPath auf RelativeLayout angewendet wird, da das Formular /RelativeLayout[....] lautet.

Verwandte Themen