2011-01-06 24 views
6

Mam problem z zwracaniem elementu za pomocą xpath. Potrzebuję uzyskać tekst z 2. TD z dużego stołu.xpath najbliższy element do danego elementu

<tr> 
<td> 
    <label for="PropertyA">Some text here </label> 
</td> 
<td> TEXT!! </td> 
</tr> 

Jestem w stanie znaleźć element etykiety, ale mam problem z wyborem siostrzanego TD, aby zwrócić tekst.

To jak ja wybrać etykietę:

"//label[@for='PropertyA']" 

dzięki

Odpowiedz

16

Szukasz osi following-sibling. Szuka w rodzeństwie w tym samym rodzica - tam jest tr. Jeśli td s nie są w tym samym tr, to nie zostaną znalezione. Jeśli chcesz, możesz użyć osi following.

//td[label[@for='PropertyA']]/following-sibling::td[1] 
+0

to działało świetnie, bardzo dziękuję – nologo

+0

+1 za używanie 'follow-sibling' zamiast' following'. Ta pierwsza jest bardziej niezawodną metodą - mniej prawdopodobne, że coś pójdzie nie tak, np. jeśli nie ma następującego-rodzeństwa :: td nie wybierze złego td. – LarsH

6

od elementu label, powinno być:

//label[@for='PropertyA']/following::td[1] 

a następnie użyć metody DOM z języka hostingu aby uzyskać wartość ciągu.

Albo wybierz węzeł tekstowy (coś, czego nie polecam) z:

//label[@for='PropertyA']/following::td[1]/text() 

lub jeśli to będzie tylko ten jeden jedyny węzeł, a następnie można użyć string() funkcję:

string(//label[@for='PropertyA']/following::td[1]) 

można również wybrać z wspólnego przodka tr odczuwalna:

//tr[td/label/@for='PropertyA']/td[2] 
+0

+1. Wyczerpująca odpowiedź. – Flack

0

otrzymuję żadnych następujący element:

// td [label [@ na = 'PropertyA']]/following-sibling :: *

Powiązane problemy