Nokogiri儿童方法

Ben*_*Ben 2 ruby nokogiri xml-parsing

我在这里有以下XML:

<listing>
    <seller_info>
    <payment_types>Visa, Mastercard, , , , 0, Discover, American Express </payment_types>
    <shipping_info>siteonly, Buyer Pays Shipping Costs </shipping_info>
    <buyer_protection_info/>
    <auction_info>
    <bid_history>
    <item_info>
</listing>
Run Code Online (Sandbox Code Playgroud)

以下代码适用于显示第一个//listing节点的第一个子节点:

require 'nokogiri'
require 'open-uri' 

html_data = open('http://aiweb.cs.washington.edu/research/projects/xmltk/xmldata/data/auctions/321gone.xml')

nokogiri_object = Nokogiri::XML(html_data)
listing_elements = nokogiri_object.xpath("//listing")

puts listing_elements[0].children[1]
Run Code Online (Sandbox Code Playgroud)

这也有效:

puts listing_elements[0].children[3]
Run Code Online (Sandbox Code Playgroud)

我尝试使用<payment_types>以下代码访问第二个节点:

puts listing_elements[0].children[2]
Run Code Online (Sandbox Code Playgroud)

但显示一个空白行.通过Firebug,它显然是列表节点的第二个子节点.通常,只有奇数可以使用children方法.

这是Nokogiri的错误吗?有什么想法吗?

Ger*_*rry 6

它不是一个bug,它是在解析包含"\n"(或空节点)的字符串时创建的空间,但您可以使用该noblanks选项来避免它们:

nokogiri_object = Nokogiri::XML(html_data) { |conf| conf.noblanks }
Run Code Online (Sandbox Code Playgroud)

使用它,你的阵列中没有空格.