如何找到匹配元素(包括文本节点)内的所有子节点?

时间:2009-10-11 17:25:38

标签: ruby xpath nokogiri

在jquery中非常简单

例如

$("br").parent().contents().each(function() {

但是对于nokogiri,xpath,

它运作得不好

var = doc.xpath('//br/following-sibling::text()|//br/preceding-sibling::text()').map do |fruit| fruit.to_s.strip end

2 个答案:

答案 0 :(得分:2)

require 'rubygems'
require 'nokogiri'

doc = Nokogiri::HTML(DATA.read)
fruits = doc.xpath('//br/../text()').map { |text| text.content.strip }
p fruits


__END__
<html>
<body>
  <div>
    apple<br>
    banana<br>
    cherry<br>
    orange<br>
  </div>
</body> 

答案 1 :(得分:0)

我对nokogiri不熟悉,但是你是否试图找到包含<br/>的任何元素的所有子元素?如果是,请尝试:

//*[br]/node()

在任何情况下,使用text()只会匹配文本节点,而不会匹配任何兄弟元素,这些元素可能是您想要的,也可能不是。如果你实际上只想要文本节点,那么

//*[br]/text()

应该这样做。