Last active
August 29, 2015 13:57
-
-
Save wppurking/9583337 to your computer and use it in GitHub Desktop.
Hot to searching node use Nokogiri
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'nokogiri' | |
xml = %q(<root> | |
<sitcoms> | |
<sitcom> | |
<name>Married with Children</name> | |
<characters> | |
<character>Al Bundy</character> | |
<character>Bud Bundy</character> | |
<character>Marcy Darcy</character> | |
</characters> | |
</sitcom> | |
<sitcom> | |
<name>Perfect Strangers</name> | |
<characters> | |
<character>Larry Appleton</character> | |
<character>Balki Bartokomous</character> | |
</characters> | |
</sitcom> | |
</sitcoms> | |
<dramas> | |
<drama> | |
<name>The A-Team</name> | |
<characters> | |
<character>John "Hannibal" Smith</character> | |
<character>Templeton "Face" Peck</character> | |
<character>"B.A." Baracus</character> | |
<character>"Howling Mad" Murdock</character> | |
</characters> | |
</drama> | |
</dramas> | |
</root>) | |
doc = Nokogiri::XML(xml) | |
# 搜索搜索 sitcom 节点, 直接使用元素名 (Element) | |
sitcom_node_set = doc.css('sitcom') | |
puts sitcom_node_set.size # 2 | |
# 通过 CSS 搜索子节点, <name> | |
name_node_set = doc.css('sitcom name') | |
puts name_node_set.size # 2 , 不是 3, 因为是查询 sitcom 下的 name | |
# 还有任何你想象得到的 css 选择语法 | |
# ------------------------ Further Info -------------------- | |
# 解析出来的不是 Node, 而是 NodeSet | |
sitcom_node_set.class # Nokogiri::XML::NodeSet | |
# 对于他的操作详细可参考: https://github.com/sparklemotion/nokogiri/wiki/Cheat-sheet#working-with-a-nokogirixmlnodeset | |
# 其中使用的最多的 API 为 each, inner_html, inner_text/text, at_css, css, to_x | |
sitcom_node_set.each do |node| | |
# 遍历 NodeSet, 返回的才是一个一个的 Element (其实就是 Node) | |
puts node.class # Nokogiri::XML::Element refs: http://nokogiri.org/Nokogiri/XML/Element.html | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment