XPath ‘ начинается с’ возвращает ноль, но элемент присутствует

#ruby-on-rails #ruby #xpath #nokogiri

#ruby-on-rails #ruby #xpath #nokogiri

Вопрос:

У меня есть два типа Nokogiri::HTML.fragment :

 <td><a href="somelink?etc...">text</a></td>
 

и:

 <a href="somelink?etc...">text</a> <!-- not wrapped in <td> tag -->
 

Мне нужно извлечь ссылки с href started with somelink . Во фрагменте может быть более одной ссылки, и не все из них могут быть somelink в href атрибуте.

Я использовал этот код:

 fragment = Nokogiri::HTML.fragment('<td><a href="somelink?etc...">text</a></td>')
fragment.xpath('.//a[starts-with(@href, "somelink")]')
 

Это нормально работает для фрагментов первого типа, обернутых <td> тегом, но когда я запускаю эту функцию для второго типа, я получаю пустой массив.

Когда я запускаю fragment.xpath('.//a') второй тип, я получаю все ссылки в массиве, но мне все равно нужно их отфильтровать href .

Может кто-нибудь объяснить это странное поведение?

Комментарии:

1. попробуйте без точки : fragment.xpath(‘//a[starts-with(@href, «somelink»)]’)

2. @Jayvee нет (( Без точки это не работает даже для первого типа (с тегом <td>)