Один лайнер nokogiri xpath lookup - PullRequest
2 голосов
/ 23 июня 2011

Когда я смотрю xpath с

b.xpath("td[@class='team']/img").each do |d|
  puts d['id']
end

Элемент "d" является узлом html. Я могу ссылаться на атрибуты в нем.

Но когда я пытаюсь найти один и тот же элемент в одной строке, он возвращается как строка.

c = b.xpath("td[@class='team']/img")[0]

В массиве только один элемент I, мне не нужно ничего перебирать .each. Есть ли способ сделать эту одну строку?

Ответы [ 2 ]

2 голосов
/ 23 июня 2011

Вот тест, который я собрал:

html = '<div id="foo">bar</div>'

b = Nokogiri::HTML.fragment(html)

b.xpath(".//div").each do |d|
  puts d.class
  puts d['id']
end

c = b.xpath(".//div")[0]

puts c.class
puts c['id']

Как и следовало ожидать, в результате получается:

Nokogiri::XML::Element
foo
Nokogiri::XML::Element
foo

Таким образом, оба подхода фактически возвращают объект типаNokogiri :: XML :: Element.

1 голос
/ 28 июня 2011

В итоге я сделал что-то вроде этого:

t = a.xpath("tr/td[@class='team']/img")
away = t[0]['id']
home = t[1]['id']
...