首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将HTML文档格式化为特定的输出?

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

Stack Overflow用户
提问于 2013-10-26 19:33:28
回答 1查看 69关注 0票数 0

我试图将那个HTML文档处理成一个特定的输出,我成功地收到了如下所示的结果:

代码语言:javascript
复制
<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>

我想要实现这样的目标:

代码语言:javascript
复制
Austria 
Wolfhard
Bulgaria
Nestor
Croatia
Sabina, Florencije
Czech Republic
Šarlota, Zoe

名称的最大数量为3。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-27 04:30:11

HTML是一个无效的示例。使用有效的最小样本数据是很重要的。

我不在我的电脑附近,但这看起来差不多是对的:

代码语言:javascript
复制
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 < v2.0,告诉Ruby这一点很重要,这就是为什么编码行在那里:

代码语言:javascript
复制
# encoding: utf8

下面是如何搜索DOM:

代码语言:javascript
复制
countries = doc.search('.country')
data = countries.map { |country|
  name = country.at('b').text
  cities = country.search('div').map(&:text)
  {
    :name => name,
    :cities => cities
  }
}

它返回一个散列数组,其中每个散列包含国家名和城市名称的子数组。在那里,您可以轻松地迭代数组,并根据需要输出值。

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

  1. 因为有多个带有divclass="country"标记,所以可以使用searchcss方法对它们进行迭代。css需要一个CSS选择器,而search则允许CSS或XPath。我通常使用search,因为有时我使用CSS,有时使用XPath,并且在开发代码时可能会在它们之间跳转,因为可能会有更好的流。除了选择器之外,还必须更改方法名是一件痛苦的事。
  2. 对于所选的每个div,使用<b>捕获第一个找到的匹配元素,然后为城市获取匹配的嵌入式div的at标记很容易。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19610982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档