2013-03-28 10 views
5

Chciałbym użyć xpath, aby wybrać łącze, którego class="watchListItem", span="icon icon_checked" i h3="a test". Mogę użyć xpath, aby uzyskać pasujący link i span, lub link i h3, ale nie link, zakres i h3.Xpath - Uzyskaj klasę nadrzędną przez dopasowanie dwóch węzłów potomnych

Oto co próbowałem:

//*[@class = 'watchListItem']/span[@class = 'icon icon_checked'] 

//*[@class= 'watchListItem']/h3[text()='AA'] 

szukam czegoś takiego:

//*[@class = 'watchListItem']//*[span[@class = 'icon icon_checked'] and h3[text()='AA']]

<li> 
<a class="watchListItem" data-id="thisid1" href="javascript:void(0);"> 
<span class="icon icon_checked"/> 
<h3 class="itemList_heading">a test</h3> 
</a> 
</li> 

<li> 
<a class="watchListItem" data-id="thisid2" href="javascript:void(0);"> 
<span class="icon icon_unchecked"/> 
<h3 class="itemList_heading">another test</h3> 
</a> 
</li> 

<li> 
<a class="watchListItem" data-id="thisid3" href="javascript:void(0);"> 
<span class="icon icon_checked"/> 
<h3 class="itemList_heading">yet another test</h3> 
</a> 
</li> 

Odpowiedz

5

Można użyć ścieżki lokalizacji child:: tak:

//a[@class="watchListItem" 
    and child::span[@class="icon icon_checked"] 
    and child::h3[text()="another test"]] 

To będzie wybrać kotwicę z data-id="thisid3".

+0

Wpadłem na podobną odpowiedź, ale użyłem '.// span' zamiast' child :: span'. Czy wiesz, jaka jest różnica? Czy ':: child' wybierze tylko dzieci bezpośrednie, czy też wybierze potomka? To nie ma znaczenia w sprawie. Po prostu ciekawy. – Ben

+0

:: potomek to robi, :: dziecko powinno wybierać tylko najbliższe dzieci :) @Ben –

+1

@Ben choć .// wybrałoby potomków, nie tylko dzieci. –

Powiązane problemy