gpt4 book ai didi

ruby - 如何使用 Nokogiri 只选择叶节点?

转载 作者:数据小太阳 更新时间:2023-10-29 07:23:52 24 4
gpt4 key购买 nike

我正在寻找一些关于如何完成的建议。我正在尝试仅使用 xpath 的解决方案:

一个 html 例子:

<div>
<div>
<div>text div (leaf)</div>
<p>text paragraph (leaf)</p>
</div>
</div>
<p>text paragraph 2 (leaf)</p>

代码:

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)">]>]

但是这个 xpath 只给了我最后一个“p”。我想要的是扁平化行为,只返回叶节点。

以下是stackoverflow中的一些引用答案:

How to select all leaf nodes using XPath expression?

XPath - Get node with no child of specific type

谢谢

最佳答案

您可以使用以下方法找到没有子元素的所有元素节点:

//*[not(*)]

示例:

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)"

关于ruby - 如何使用 Nokogiri 只选择叶节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17890019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com