您的HTML是无效的示例。使用有效的最小样本数据非常重要。
我不在我的电脑附近,但这看起来是正确的:
require 'nokogiri'
# encoding: utf8
html = '
Austria
Bulgaria
Croatia
Czech Republic
'
doc = Nokogiri::HTML(html)
设置解析的DOM。因为有UTF-8字符,所以如果你使用Ruby< v2.0,这就是编码行的原因:
# encoding: utf8
以下是搜索DOM的方法:
countries = doc.search('.country')
data = countries.map { |country|
name = country.at('b').text
cities = country.search('div').map(&:text)
{
:name => name,
:cities => cities
}
}
返回一个哈希数组,其中每个哈希包含国家名称和城市名称的子数组。从那里,您可以轻松地遍历数组并根据需要输出值。
这一切都非常简单,你只需要考虑增量步骤:
由于div标记有多个class="country",因此可以使用search或css方法对其进行迭代。 css需要CSS选择器,而search允许CSS或XPath。我通常使用search因为有时候我会使用CSS,有时候会使用XPath,并且在我开发代码时可能会在它们之间跳转,因为一个人可能会更好地流动。除了选择器之外,还必须更改方法名称是一种痛苦。
对于每个选定的div,可以使用轻松获取嵌入的at标记,该标记抓取第一个找到的匹配元素,然后search获取匹配的嵌入div城市。
醇>