0

我有一个文档,想要提取几个元素,它们是父元素的直接后代,但忽略了其他元素。问题是我没有按照它们在文档中出现的顺序获取元素。原因实际上可能是我使用的 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>
4

2 回答 2

1

尝试使用这个 XPath:

//content/p|//content/h1|//content/h2
于 2009-09-18T21:12:17.850 回答
0

您希望按照它们在文档中的显示方式列出不同的元素,但正如您所见,您根据 css 选择器顺序获取元素。

为了解决这个问题,您必须向元素添加一个类属性,以便选择具有该类的所有元素,而不是仅使用一个 css 选择器,这意味着元素将按正确的顺序排列。

于 2009-09-18T21:06:50.713 回答