Все мои поиски показывают, что использование «.//» в 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