【发布时间】:2015-02-02 13:55:25
【问题描述】:
我正在尝试使用 Nokogiri 从 HTML 文档中获取所有节点。
我有这个 HTML:
<html>
<body>
<h1>Header1</h1>
<h2>Header22</h2>
<ul>
<li>Li1</li>
<ul>
<li>Li1</li>
<li>Li2</li>
</ul>
</ul>
</body>
</html>
字符串版本:
string_page = "<html><body><h1>Header1</h1><h2>Header22</h2><ul><li>Li1</li><ul><li>Li1</li><li>Li2</li></ul></ul></body></html>"
我创建了一个对象:
page = Nokogiri.HTML(string_page)
我试图遍历它:
result = []
page.traverse { |node| result << node.name unless node.name == "text" }
=> ["html", "h1", "h2", "li", "li", "li", "ul", "ul", "body", "html", "document"]
但我不喜欢的是元素的顺序。我需要一个与它们出现的顺序相同的数组:
["html", "body", "h1", "h2", "ul", "li", "ul", "li", "li" ]
我不需要结束标签。
有没有人有更好的解决方案来做到这一点?
【问题讨论】:
-
你为什么要这么做?通过迭代遍历每个节点是非常低效的。您可以使用 SAX 解析器做同样的事情,而且它可能会运行得更快。