首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Hpricot移动节点

如何使用Hpricot移动节点
EN

Stack Overflow用户
提问于 2017-02-02 02:25:41
回答 1查看 25关注 0票数 0

我正在使用Hpricot从网页中选择一个<div>元素:

代码语言:javascript
复制
doc = open("overview.html") { |f| Hpricot(f) }
puts doc.search("div[@class=leftnav-btn]")

我想复制该元素,并使用class="secondDiv"将其粘贴到其他<div>元素下。

我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2017-02-02 03:59:37

我会这样做:

代码语言:javascript
复制
require 'nokogiri'

div1 = doc.at('div.leftnav-btn').remove
doc.at('div.secondDiv').add_next_sibling(div1)
puts doc.to_html

# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html>
# >>   <body>
# >>     
# >>     <div class="secondDiv"></div>
# >> <div class="leftnav-btn">foo</div>
# >>   </body>
# >> </html>

<body>后面的空行是<div>标记后面的尾随TextNode的结果。它不会影响XML的工作方式,也不会影响数据,只是表面上的。

代码语言:javascript
复制
doc.at('.leftnav-btn').next.class # => Nokogiri::XML::Text
doc.at('.leftnav-btn').next.to_html # => "\n    "

注意,在上面的选择器中,我只使用了.leftnav-btn类,因为它不需要使用完整的div.leftnav-btn。像Hpricot一样,Nokogiri使用CSS选择器,也允许XPath,这使得更多的灵活性。Nokogiri也支持%/,尽管我们不使用它们:

代码语言:javascript
复制
(doc % '.leftnav-btn').next.class # => Nokogiri::XML::Text
(doc % '.leftnav-btn').next.to_html # => "\n    "

Hpricot很久以前就被弃用了,不应该使用。Nokogiri是Ruby的HTML/XML解析标准。

Nokogiri教程涵盖了基础知识,因此请花点时间学习它们。有关详细信息,请参阅Nokogiri::XML::NodeNokogiri::XML::NodeSet的文档。

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

https://stackoverflow.com/questions/41986972

复制
相关文章

相似问题

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