Как найти все дочерние узлы внутри соответствующих элементов (включая текстовые узлы)? - PullRequest
2 голосов
/ 11 октября 2009

в 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 ]

2 голосов
/ 29 декабря 2009
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> 
0 голосов
/ 12 октября 2009

Я не знаком с нокогири, но вы пытаетесь найти всех детей любого элемента, который содержит <br/>? Если так, то попробуйте:

//*[br]/node()

В любом случае, использование text () будет соответствовать только текстовым узлам, а не элементам одного уровня, что может быть, а может и не быть тем, что вы хотите. Если вам нужны только текстовые узлы, тогда

//*[br]/text()

должен сделать трюк.

...