【问题标题】:Configure Nokogiri to avoid empty XML::Text entries?配置 Nokogiri 以避免空 XML::Text 条目?
【发布时间】:2016-06-08 23:42:01
【问题描述】:

我目前正在将 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 条目(例如 #&lt;Nokogiri::XML::Text:0x12a6ca4 "\n "&gt;)在我手动编辑的示例中不存在。

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

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

【问题讨论】:

    标签: ruby xml-parsing nokogiri


    【解决方案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">]>]>]>
    

    【讨论】:

      猜你喜欢
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 2014-02-02
      • 1970-01-01
      相关资源
      最近更新 更多