我正在开发一个vim rspec插件(https://github.com/skwp/vim-rspec) - 我正在从rspec解析一些html。它看起来像这样:
doc = %{
<dl>
<dt id="example_group_1">This is the heading text</dt>
Some puts output here
</dl>
}
我可以获得使用的全部内容:
(Hpricot.parse(doc)/:dl).first.inner_html
我可以通过
获得dt(Hpricot.parse(doc)/:dl).first/:dt
但是如何才能访问“Some puts output here”区域?如果我使用inner_html,还有太多其他垃圾要解析。我查看了hpricot文档,但是没有看到一个简单的方法来获取html元素的内部文本,而忽略了它的html子元素。
答案 0 :(得分:1)
我最终通过手动解析孩子来找出自己的路线:
(@context/"dl").each do |dl|
dl.children.each do |child|
if child.is_a?(Hpricot::Elem) && child.name == 'dd'
# do stuff with the element
elsif child.is_a?(Hpricot::Text)
text=child.to_s.strip
puts text unless text.empty?
end
end
答案 1 :(得分:0)
请注意,这是您的HTML。如果您可以控制它,则应将所需内容包装在<dd>
中。
在XML术语中,您要查找的是<dt>
元素后面的TextNode。在我的评论中,我展示了如何在Nokogiri中使用XPath选择此节点。
但是,如果您必须使用Hpricot,并且无法选择使用它的文本节点,那么您可以通过获取inner_html
然后删除不需要的内容来解决这个问题:
(Hpricot.parse(doc)/:dl).first.inner_html.sub %r{<dt>.+?</dt>}, ''