首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取基于外部标签匹配的内容?

如何获取基于外部标签匹配的内容?
EN

Stack Overflow用户
提问于 2013-05-26 10:53:38
回答 1查看 35关注 0票数 0

我正在尝试根据链接和名称所在组之外的标记来组织链接和名称的列表。它是这样设置的:

代码语言:javascript
复制
<h4>Volkswagen</h4>
<ul>
   <li><a href="http://beetle.cars.com">beetle</a></li>
</ul>

<h4>Chevy</h4>
<ul>
  <li><a href="http://volt.cars.com">Volt / Electric</a></li>
</ul>

我需要的是最终以名称作为链接的以下格式的结果,但如果我能正确组织项目,我可以稍后这样做。

每个汽车品牌可以有多个不同数量的车型。我需要按汽车品牌来组织它们:

代码语言:javascript
复制
Volkswagen
   Beetle Link  Beetle
   Jetta Link   Jetta

Chevy
   Volt Link  Volt / Electric
   S10 Link  S10

我可以毫不费力地拿到品牌清单。我只是很难将一批车型与每个品牌联系起来,因为<h4>标签没有嵌套,所以我不知道如何将它们与下面的<ul>汽车列表联系起来。

EN

回答 1

Stack Overflow用户

发布于 2013-05-29 10:08:24

我更喜欢直接深入到每一辆车,然后再回来提取汽车的品牌:

代码语言:javascript
复制
cars = Hash.new { |h, k| h[k] = [] }

doc.xpath('//ul/li/a').each do |car|
  brand = car.at('../../preceding-sibling::h4[1]').text
  cars[brand] << {link: car['href'], name: car.text}
end

请注意,使用指定默认值为数组的块来初始化散列。这允许附加散列(通过<<),如下所示。XPath ../../preceding-sibling::h4[1]说:返回到ul级别,并回顾前面的第一个h4。这是与汽车相对应的品牌。

输出:

代码语言:javascript
复制
{"Volkswagen"=>[
                {:link=>"http://beetle.cars.com", :name=>"beetle"}
                # others here
               ],
 "Chevy"=>[
           {:link=>"http://volt.cars.com", :name=>"Volt / Electric"}
           # others here
          ]
}

我发现这种技术很好很简单,只有一个循环。不过,并不是每个人都喜欢这种风格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16755808

复制
相关文章

相似问题

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