Получение элементов в порядке их появления в документе - PullRequest
0 голосов
/ 19 сентября 2009

У меня есть документ, и я хочу извлечь пару элементов, которые являются прямыми потомками родительского элемента, но исключают другие. Проблема в том, что я не получаю элементы в порядке их появления в документе. Причина может быть в том, что используемый мной селектор CSS неправильный ...

require 'rubygems'
require 'nokogiri'
require 'open-uri'

html = <<END
  <content>
    <p>Lorem</p>
    <div>
      FOO
      <p>BAR</p>
    </div>
    <h1>Ipsum</h1>
    <p>Dolor</p>
    <div>
      BAR
      <h2>FOO</h2>
    </div>
    <h2>Sit</h2>
    <p>Amet</p>
  </html>
END

Nokogiri::HTML(html).css('content > p, content > h1, content > h2').inner_html # "<p>Lorem</p><p>Dolor</p><p>Amet</p><h1>Ipsum</h1><h2>Sit</h2>"

То, что я хочу, это

<p>Lorem</p><h1>Ipsum</h1><p>Dolor</p><h2>Sit</h2><p>Amet</p>

Ответы [ 2 ]

1 голос
/ 19 сентября 2009

Попробуйте использовать этот XPath:

//content/p|//content/h1|//content/h2
0 голосов
/ 19 сентября 2009

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

Чтобы решить эту проблему, вам нужно добавить атрибут класса к элементам, чтобы вы выбрали все элементы с этим классом, чем использовать только один селектор CSS, который будет означать, что элементы будут в правильном порядке.

...