我有这样的文档:
<DL><a lot of tags>...<H3>Entry 1</H3><a lot of tags>...</DL>
<DL><a lot of tags>...<H3>Entry 2</H3><a lot of tags>...
<DL><a lot of tags>...<H3>Entry 21</H3><a lot of tags>...
<DL><a lot of tags>...<H3>Entry 211</H3><a lot of tags>...</DL>
</DL>
</DL>
<DL><a lot of tags>...><H3>Entry 3</H3><a lot of tags>...</DL>
我想找到所有''条目,使用以下代码很容易:
@doc=Nokogiri::HTML(@file)
@doc.css('DL>h3').each do |node| puts node.text end
如何提取任何条目的 H3 父项列表?我想有一个作为"父"的方法返回关系,即:条目211.父级 ==>/条目 2/条目 21/
如果您只需要每个h3
元素的父元素
@doc.css('DL>h3').collect(&:parent)
应该做这个伎俩。
但是,看起来您可能希望所有元素都是dl
元素的子元素h3
该元素是h3
元素的祖先。如果我理解了这一点并且您的结构正确,您应该能够做到
@doc.css('dl>h3').collect { |h3| h3.ancestors('dl').css('h3') }
这为您提供了一个包含Array
Array
,其中包含h3
元素,这些元素是每个h3
元素祖先中dl
元素的后代。困惑?我肯定是:)
例如,使用示例 HTML,条目 211 h3
的结果为
@doc.css('dl>h3').collect { |h3| h3.ancestors('dl').css('h3') }[3].collect(&:text)
#=> ["Entry 211", "Entry 21", "Entry 2"]
这是否足够接近您想要的?