用Nokogiri计算xml中的元素

Pap*_*nho 2 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>
Run Code Online (Sandbox Code Playgroud)

mat*_*att 9

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

doc.root.children.each do |c|
  p c
end
Run Code Online (Sandbox Code Playgroud)

输出:

#<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">
Run Code Online (Sandbox Code Playgroud)

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

doc = Nokogiri::XML(open('link..to....element.xml')) { |c| c.noblanks }
Run Code Online (Sandbox Code Playgroud)

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