Luc*_*cas 4 ruby xpath nokogiri
我正在寻找有关如何完成操作的建议。我正在尝试仅使用xpath的解决方案:
一个html示例:
<div>
<div>
<div>text div (leaf)</div>
<p>text paragraph (leaf)</p>
</div>
</div>
<p>text paragraph 2 (leaf)</p>
Run Code Online (Sandbox Code Playgroud)
码:
doc = Nokogiri::HTML.fragment("- the html above -")
result = doc.xpath("*[not(child::*)]")
[#<Nokogiri::XML::Element:0x3febf50f9328 name="p" children=[#<Nokogiri::XML::Text:0x3febf519b718 "text paragraph 2 (leaf)">]>]
Run Code Online (Sandbox Code Playgroud)
但是这个xpath只给我最后一个“ p”。我想要的是一个扁平行为,只返回叶节点。
以下是stackoverflow中的一些参考答案:
谢谢
您可以使用以下命令找到所有没有子元素的元素节点:
//*[not(*)]
Run Code Online (Sandbox Code Playgroud)
例:
require 'nokogiri'
doc = Nokogiri::HTML.parse <<-end
<div>
<div>
<div>text div (leaf)</div>
<p>text paragraph (leaf)</p>
</div>
</div>
<p>text paragraph 2 (leaf)</p>
end
puts doc.xpath('//*[not(*)]').length
#=> 3
doc.xpath('//*[not(*)]').each do |e|
puts e.text
end
#=> "text div (leaf)"
#=> "text paragraph (leaf)"
#=> "text paragraph 2 (leaf)"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1268 次 |
| 最近记录: |