2015-10-07 2 views
0

Вот мой HTML код:Невозможно выбрать несколько значений с помощью XPath

<table id="laptop_detail" class="table"> 
    <tr> 
     <td style="padding-left:18px" class="ha">Touchscreen</td> 
     <td class="val"><span class="no_icon">No</span></td> 
    </tr> 
    <tr> 
     <td style="padding-left:18px" class="ha">Water Dispenser</td> 
     <td class="val"><span class="no_icon">No</span></td> 
    </tr> 
    <tr> 
     <td style="padding-left:18px" class="ha">Colour/Material</td> 
     <td class="val">Grey</td> 
    </tr> 
</table> 

Вот мой XPath:

$x('//*[@id="laptop_detail"]//tr/td[contains(. ,"Touchscreen")]/following-sibling::td[1]/span/text() and //*[@id="laptop_detail"]//tr/td[contains(. ,"Water Dispenser")]/following-sibling::td[1]/span/text() and //*[@id="laptop_detail"]//tr/td[contains(. ,"Colour")]/following-sibling::td[1]/text()') 

Но мой XPath возвращает "истина", а не мое требование «Нет, нет , Серый ". Я знаю, что что-то не так с моим xpath, но я не могу это понять.

EDIT: Хорошо я был немного успеха, я был в состоянии получить «Нет, нет», используя этот XPath:

$x('//*[@id="laptop_detail"]//tr/td[contains(. ,"Touchscreen") or contains(. ,"Water")]/following-sibling::td[1]/span/text()') 

, но не смог получить «Грэй», как это значение не находится внутри диапазона тег.

+1

Почему бы не просто добавить еще одно выражение для серого с использованием | оператор. –

+0

@DmytroPastovenskyi не знал, смогу ли я это сделать. –

+0

Тогда попробуйте решение ниже, оно должно работать для вас. –

ответ

0

Вот исправление к вашему решению (я добавил | оператор):

//*[@id="laptop_detail"]/tr/td[contains(. ,"Touchscreen") or contains(. ,"Water")]/following-sibling::td[1]/span/text() | //*[@id="laptop_detail"]/tr/td[contains(. ,"Colour/Material")]/following-sibling::td[1]/text() 

Вы можете использовать немного более простой синтаксис (работает быстрее), если это приемлемо для вашей логики.

/table[@id="laptop_detail"]/tr/td[@class='val']/span/text() | /table[@id="laptop_detail"]/tr/td[@class='val']/text() 
Смежные вопросы