配置Nokogiri以避免空XML :: Text条目?

时间:2016-02-25 23:03:07

标签: ruby xml-parsing nokogiri

我目前正在使用Ruby与Nokogiri和Nori。我使用以下方法阅读XML文档:

xml = Nokogiri::XML(File.open('file.xml')) { |config| config.strict }

XML文档有缩进以使其更具可读性,但Nokogiri将这些缩进并将它们转换为Nokogiri :: XML :: Text对象,我不想要。

例如,请考虑这个简单的XML文档:

<root>
  <level1>value</level1>
</root>

Nokogiri从中产生以下内容:

#<Nokogiri::XML::Document:0x12a7564 name="document" children=[#<Nokogiri::XML::Element:0x12a6fb0 name="root" children=[#<Nokogiri::XML::Text:0x12a6ca4 "\n  ">, #<Nokogiri::XML::Element:0x12a6b14 name="level1" children=[#<Nokogiri::XML::Text:0x12a640c "value">]>, #<Nokogiri::XML::Text:0x12a5e80 "\n">]>]>

相反,我想得到的是:

#<Nokogiri::XML::Document:0x12a7564 name="document" children=[#<Nokogiri::XML::Element:0x12a6fb0 name="root" children=[#<Nokogiri::XML::Element:0x12a6b14 name="level1" children=[#<Nokogiri::XML::Text:0x12a640c "value">]>]>]>

请注意,我手动编辑的示例中不存在捕获缩进的Nokogiri :: XML :: Text条目(例如#<Nokogiri::XML::Text:0x12a6ca4 "\n ">)。

这些不需要的条目在以后尝试迭代字段和其他对象时会导致问题(例如检查属性等)。

有没有办法配置Nokogiri 避免添加这些不需要的基于缩进的条目而只添加这些条目?

1 个答案:

答案 0 :(得分:1)

我希望这可以解决您的问题:您可以只使用noblanks选项:

require 'nokogiri'
xml = Nokogiri::XML(File.open('file.xml')) { |config| config.strict }
xml2 = Nokogiri::XML(File.open('file.xml')) { |config| config.strict.noblanks }

xml会给你:

#<Nokogiri::XML::Document:0x3ff585c84550 name="document" children=[#<Nokogiri::XML::Element:0x3ff585c84050 name="root" children=[#<Nokogiri::XML::Text:0x3ff586427ca8 "\n  ">, #<Nokogiri::XML::Element:0x3ff586427aa0 name="level1" children=[#<Nokogiri::XML::Text:0x3ff5864275b4 "value">]>, #<Nokogiri::XML::Text:0x3ff58642708c "\n">]>]> 

xml2将是:

#<Nokogiri::XML::Document:0x3ff58640fdb0 name="document" children=[#<Nokogiri::XML::Element:0x3ff58640f964 name="root" children=[#<Nokogiri::XML::Element:0x3ff58640f004 name="level1" children=[#<Nokogiri::XML::Text:0x3ff58640eb2c "value">]>]>]>