如何将 HTML 文档格式化为特定输出



我正在尝试将该HTML文档处理为特定的输出,我设法收到了这样的东西:

<div class="country">
  <b>Austria</b>
  <div>Wolfhard</div>
</div>
<div class="country">
  <b>Bulgaria</b>
  <div>Nestor</div>
</div>
<div class="country">
  <b>Croatia</b>
  <div>Sabina</div>
  <div>Florencije</div>
</div>
<div class="country">
  <b>Czech Republic</b>
  <div>Šarlota</div>
  <div>Zoe</div>
</div>

我想实现这样的事情:

Austria 
Wolfhard
Bulgaria
Nestor
Croatia
Sabina, Florencije
Czech Republic
Šarlota, Zoe

名称的最大数量为 3。

您的 HTML 是无效的示例。请务必使用有效的最小样本数据。

我不在我的电脑附近,但这看起来是正确的:

require 'nokogiri'
# encoding: utf8
html = '<html>
  <body>
    <div class="country">
      <b>Austria</b>
      <div>Wolfhard</div>
    </div>
    <div class="country">
      <b>Bulgaria</b>
      <div>Nestor</div>
    </div>
    <div class="country">
      <b>Croatia</b>
      <div>Sabina</div>
      <div>Florencije</div>
    </div>
    <div class="country">
      <b>Czech Republic</b>
      <div>Šarlota</div>
      <div>Zoe</div>
    </div>
  </body>
</html>'
doc = Nokogiri::HTML(html)

这将设置一个解析的 DOM。因为有 UTF-8 字符,所以如果你使用的是 Ruby

# 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
  }
}

这将返回一个哈希数组,其中每个哈希包含国家/地区名称和城市名称的子数组。从那里,您可以轻松迭代数组并根据需要输出值。

这一切都非常简单,您只需要考虑增量步骤:

  1. 由于有多个带有 class="country"div 标记,因此可以使用 searchcss 方法迭代它们。 css需要一个CSS选择器,而search允许CSS或XPath。我通常使用search因为有时我使用 CSS,有时使用 XPath,并且在开发代码时可能会在它们之间跳转,因为一个代码可能会更好。除了选择器之外,还必须更改方法名称是一种痛苦。
  2. 对于每个选定的div,使用 at 可以轻松获取嵌入的 <b> 标签,这会抓取找到的第一个匹配元素,然后search城市匹配的嵌入式div。

相关内容

  • 没有找到相关文章

最新更新