Skip to content

Instantly share code, notes, and snippets.

@wppurking
Last active August 29, 2015 13:57
Show Gist options
  • Save wppurking/9583337 to your computer and use it in GitHub Desktop.
Save wppurking/9583337 to your computer and use it in GitHub Desktop.
Hot to searching node use Nokogiri
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