如何使用 Hpricot 移动节点



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

doc = open("overview.html") { |f| Hpricot(f) }
puts doc.search("div[@class=leftnav-btn]")

我想复制该元素并将其粘贴到其他<div>元素下,并带有class="secondDiv".

我该怎么做?

我会这样做:

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 的工作方式,也不会影响数据,它只是表面的。

doc.at('.leftnav-btn').next.class # => Nokogiri::XML::Text
doc.at('.leftnav-btn').next.to_html # => "n    "

请注意,在上面的选择器中,我只使用类.leftnav-btn,因为没有必要使用完整的div.leftnav-btn。Nokogiri和Hpricot一样,使用CSS选择器,也允许XPath,从而提供了更大的灵活性。Nokogiri 还支持 %/ 尽管我们不使用它们:

(doc % '.leftnav-btn').next.class # => Nokogiri::XML::Text
(doc % '.leftnav-btn').next.to_html # => "n    "

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

Nokogiri 教程涵盖了基础知识,因此请花一些时间与他们交谈。有关详细信息,请参阅 Nokogiri::XML::Node 和 Nokogiri::XML::NodeSet 的文档。

相关内容

  • 没有找到相关文章

最新更新