如何使用Nokogiri仅选择叶子节点?

卢卡斯

我正在寻找有关如何完成操作的建议。我正在尝试仅使用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中的一些参考答案:

如何使用XPath表达式选择所有叶节点?

XPath-获取没有特定类型的子节点的节点

谢谢

7stud

您的代码存在以下问题:

doc = Nokogiri::HTML.fragment("- the html above -")

看这里:

require 'nokogiri'

html = <<END_OF_HTML
<div>
  <div>
    <div>text div (leaf)</div>
    <p>text paragraph (leaf)</p>
  </div>
</div>
<p>text paragraph 2 (leaf)</p>
END_OF_HTML


doc = Nokogiri::HTML(html)
#doc = Nokogiri::HTML.fragment(html)
results = doc.xpath("//*[not(child::*)]")
results.each {|result| puts result}

--output:--
<div>text div (leaf)</div>
<p>text paragraph (leaf)</p>
<p>text paragraph 2 (leaf)</p>

如果我运行此命令:

doc = Nokogiri::HTML.fragment(html)
results = doc.xpath("//*[not(child::*)]")
results.each {|result| puts result}

我没有输出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用jQuery选择文本节点?

如何使用Nokogiri从Ruby中的HTML文档获取所有节点

如何使用Nokogiri替换XML节点内容

如何选择仅与给定B节点或其子集有关的A节点

如何构建一棵树然后遍历每片叶子(每次从根节点到叶子)?

叶子节点如何在innodb的物理空间中分裂?

如何使用xpath选择文本最长的节点?

Nokogiri:使用“:”搜索节点

Nokogiri-如何命名节点“ comment”?

使用selectSingleNode选择节点后如何遍历节点的子节点

如何使用XPath选择父节点?

如何使用XSLT选择或删除节点xml

使用JAXB解析Xml叶子节点元素值

如何使用Neography按属性选择节点?

如何使用Rangy选择文本节点?

如何将连续的节点与Nokogiri匹配?

使用Nokogiri创建XML节点

如何找到以确切的HTML标签作为字符串的节点(使用Nokogiri)?

JTree:如何将节点的属性添加为自己的叶子?

如何使用BeautifulSoup和Python仅选择此文本节点?

计数JSON叶子节点

如何选择nokogiri属性?

如何使用nokogiri仅选择包含某些子元素的段落?

如何仅当下一个元素是使用 Nokogiri 的特定类型时选择一个元素

如何仅显示连接到使用 Neo4J 的 Cypher 选择的节点的节点?

如何在 Javascript 中从 JSON 中检索叶子子节点?

SQL如何使用连接仅选择单行?

在 jQuery 中,如何从当前元素“开始”选择节点(仅使用字符串选择器)?

XPATH:如何选择仅包含男孩子节点的子节点