jestem pewien kodowania Perl używać XPath zlokalizować konkretny td
elementu w table`, która wygląda podobnie do tegowyrażenie XPath do umieszczenia elementu danego węzła tekstowego
<table>
<tr>
<td>...</td>
<td><font color="white" face="verdana, Helvetica, Arial" size="2">Showing <b>1</b>-<b>100</b> of <b>200</b> total</font></td>
<td>...</td>
<td>...</td>
</tr>
</table>
Co chcę jest znalezienie td
element z węzłem font/text()
, który zawiera ciąg Showing
.
mecze contains(., "Showing")
Bezpośrednie porównanie działa prawidłowo:
//td[font/text()="Showing "]
ale chcę użyć funkcji XPath tak, że mecz jest bardziej elastyczny.
Próbowałem
//td[contains(font/text(), "Showing ")]
ale tu pojawia się błąd
XPath failed due to: A sequence of more than one item is not allowed as the first argument of contains()
i udało mi się osiągnąć to, co chcę z
//td[font/text()[contains(., "Showing")]]
ale to jest bardzo brzydkie i ja Mam nadzieję na coś bardziej zwięzłego. Czy ktoś może poprawić to dla mnie, czy może potwierdzić, że jest to najlepszy i najbardziej zwięzły sposób?
bardziej zwięzły? Masz ścieżkę xpath, która mówi "Wszystkie' td's, które mają 'font', którego tekst zawiera' Showing' "- co jest dokładnie twoim opisem problemu! - a chcesz, żeby było bardziej zwięzłe ?! – AakashM
@AakashM: Tak, mam. Tylko dlatego, że jest to * jeden * sposób wyrażania tego, co chcę, nie oznacza, że jest to najczystszy *. Nie muszę pisać '//td[font/text()[.="Pokazywanie"]], więc pomyślałem, że może istnieć sposób użycia 'zawiera' zamiast' = '. – Borodin
Dlaczego więc uważasz, że wyrażenie jest "bardzo brzydkie"? To ta, której bym użył - a to oznacza, że przynajmniej według mojej wiedzy nie ma bardziej eleganckiej. –