Нокогири использование DOT '.'обозначение для XPATH - PullRequest
0 голосов
/ 21 декабря 2018

Все мои поиски показывают, что использование «.//» в xpath должно начать следующий поиск на текущем узле.В приведенном ниже коде я подумал, что должен вернуть только первый элемент h3 «Верхний уровень», и поиск должен завершиться, вместо этого я также верну второй тег h3, который полностью находится в другом узле.Чего мне не хватает.

=begin Sample HTML contains
<DIV><DIV><DIV id ='1'><h3> Top Level    </h3></DIV></DIV></DIV> 
<DIV><DIV><DIV id ='2'><h3> Bottom Level </h3></DIV></DIV></DIV> 
=end  

require 'rubygems'
require 'nokogiri'   

page = Nokogiri::HTML(open("Sample.html")) 
el = page.xpath("html/body/div/div/div[@id='1']")   # set postion in tree
puts el.inspect
=begin
[#<Nokogiri::XML::Element:0x1990410 name="div" attributes=      [#<Nokogiri::XML::Attr:0x1990200 name="id" value="1">]` 
children=[#<Nokogiri::XML::Text:0x197dda4 " \r\n\t\t\t">, #<Nokogiri::XML::Element:0x197dcc0 name="h3" 
children=[#<Nokogiri::XML::Text:0x197da74 " Top Level ">]>, #<Nokogiri::XML::Text:0x197d768 "\r\n
=end
el = page.xpath(".//h3") 
puts el.inspect
=begin
[ #<Nokogiri::XML::Element:0x197dcc0 name="h3" children=[#<Nokogiri::XML::Text:0x197da74 " Top Level ">]>, 
  #<Nokogiri::XML::Element:0x197c37c name="h3" children=[#<Nokogiri::XML::Text:0x197c190 " Bottom Level ">]>]
=end 
...