我正在使用Hpricot从网页中选择<div>
元素:
doc = open("overview.html") { |f| Hpricot(f) }
puts doc.search("div[@class=leftnav-btn]")
我想复制该元素并将其粘贴到<div>
的其他class="secondDiv"
元素下。
我该怎么做?
答案 0 :(得分:0)
我会这样做:
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
。与Hpricot一样,Nokogiri使用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的文档。