用Nokogiri计算xml中的元素

时间:2014-02-03 17:25:13

标签: ruby

我想了解为什么count给了我5

如果我是根元素并想知道我的孩子,那么它应该给我2

doc = Nokogiri::XML(open('link..to....element.xml'))
root = doc.root.children.count
puts root



<element>
  <name>Married with Children</name>
  <name>Married with Children</name>
</element>

1 个答案:

答案 0 :(得分:9)

结果是5,因为根<element>节点下有五个子节点。有两个<name>个节点和三个文本节点,每个节点都由空格组成;在开头<element>和第一个<name>之间,一个在<names>之间,一个在第二个<name>和结束</element>之间:

doc.root.children.each do |c|
  p c
end

输出:

#<Nokogiri::XML::Text:0x80544a04 "\n  ">
#<Nokogiri::XML::Element:0x80544900 name="name" children=[#<Nokogiri::XML::Text:0x8054470c "Married with Children">]>
#<Nokogiri::XML::Text:0x80544554 "\n  ">
#<Nokogiri::XML::Element:0x80544478 name="name" children=[#<Nokogiri::XML::Text:0x80544284 "Married with Children">]>
#<Nokogiri::XML::Text:0x805440cc "\n">

如果在解析时使用noblanks选项Nokogiri将不包含这些空白节点:

doc = Nokogiri::XML(open('link..to....element.xml')) { |c| c.noblanks }

现在doc.root.children.count将等于2,只会包含两个<name>元素节点。