2012-01-24 3 views
1

У меня есть следующие два элемента тд, какой переключатель xpath будет извлекать обе эти цены и ничего больше?

<TD ALIGN="LEFT" VALIGN="top" WIDTH="150" STYLE="font-size: 11px; font-family: arial" HEIGHT="65"> <a href="http://www.site.com/page/IDLM/PROD/10001512"><B><i>Brand </i></B><BR>Title</a><BR> 
$65.00 
</TD> 
<TD ALIGN="LEFT" VALIGN="top" WIDTH="35">&nbsp;</TD><TD ALIGN="LEFT" VALIGN="top" WIDTH="150" STYLE="font-size: 11px; font-family: arial" HEIGHT="65"> <a href="http://www.site.com/page/IDLM/PROD/10001511"><B><i>Brand </i></B><BR>Title</a><BR> 
<span style="color: #999999; font-weight: normal;"><strike>$212.00</strike></span>&nbsp;&nbsp;<B>$127.20</B> 
</TD> 

Я хочу, чтобы получить окончательную цену от обоих ($ 65.00 и $ 127.20). Я могу использовать

//td/br[last()]/following-sibling::text()[1]|//td/br[last()]/following-sibling::b[1] 

вернуть

[0] => 
$65.00 

    [1] => Â Â 
    [2] => $127.20 

где [1] является &nbsp;&nbsp; перед второй цены. Есть ли xpath, который будет извлекать только

[0] => 
$65.00 
    [1] => $127.20 

?

ответ

1

В обоих случаях рассматриваемый текст является конечным непустым потоком текстового узла. Так вы можете описать это на английском языке; вот как сказать это в XPath:

//td/descendant::text()[normalize-space()][last()] 
0

Я не пробовал, но мне кажется, что в данном конкретном случае,

//td/br[last()]/following-sibling::*[last()] 

может работать, потому что и текстовый узел, содержащий $65.00 и B узел, содержащий $127.20 последний из их братья и сестры.

+0

, который возвращает только цена $ 127.20, хотя я не понимаю, почему он не работает – jela

+0

@jela хмм, я подозреваю 'текст()' узел не получить соответствие '*' – AakashM

Смежные вопросы