配置 Nokogiri 以避免空 XML::Text 条目?
Configure Nokogiri to avoid empty XML::Text entries?
我目前正在 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
以 避免 添加这些不需要的基于缩进的条目,并且只添加那些?
我希望这能解决您的问题:您可以简单地使用 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">]>]>]>
我目前正在 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
以 避免 添加这些不需要的基于缩进的条目,并且只添加那些?
我希望这能解决您的问题:您可以简单地使用 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">]>]>]>