使用Nokogiri获取HTML中的div列表以及之前的标题

时间:2011-10-25 08:03:23

标签: ruby nokogiri

我正在尝试提取其class =“child”的DIV列表,并将“child”与其前面出现的class =“header”的DIV相关联。

例如:

<div class=header>HEADER A</div>
<div class=child>CHILD A.1</div>
<div class=child>CHILD A.2</div>
<div class=child>CHILD A.3</div>
<div class=header>HEADER B</div>
<div class=child>CHILD B.1</div>
<div class=child>CHILD B.2</div>
<div class=child>CHILD B.3</div>

我希望有类似下面的内容

HEADER A --> CHILD A.1
HEADER A --> CHILD A.2
HEADER A --> CHILD A.3
HEADER B --> CHILD B.1
HEADER B --> CHILD B.2
HEADER B --> CHILD B.3

2 个答案:

答案 0 :(得分:2)

只需存储上一个标题元素:

header = ""
xml.xpath("//div").each{ |node|
  if node['class'] =~ /header/
    header = node.text
  else
    puts header + " --> " + node.text
  end
}

答案 1 :(得分:2)

更'xpathy'版本:

doc.xpath('//div[@class="child"]').each do |node|
    header = node.at('./preceding-sibling::div[@class="header"][1]')
    puts header.text + " --> " + node.text
end