首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >配置Nokogiri以避免空XML::Text条目?

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

Stack Overflow用户
提问于 2016-02-25 23:03:06
回答 1查看 241关注 0票数 0

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

代码语言:javascript
代码运行次数:0
运行
复制
xml = Nokogiri::XML(File.open('file.xml')) { |config| config.strict }

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

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

代码语言:javascript
代码运行次数:0
运行
复制
<root>
  <level1>value</level1>
</root>

Nokogiri从中产生了以下内容:

代码语言:javascript
代码运行次数:0
运行
复制
#<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">]>]>

相反,我想得到的是:

代码语言:javascript
代码运行次数:0
运行
复制
#<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:0x12a6ca4 "\n ">)的Nokogiri::XML::Text条目不在我手工编辑的示例中。

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

是否有一种方法可以配置Nokogiri以避免添加这些不必要的基于缩进的条目?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-25 23:42:15

我希望这样可以解决您的问题:您可以简单地使用noblanks选项:

代码语言:javascript
代码运行次数:0
运行
复制
require 'nokogiri'
xml = Nokogiri::XML(File.open('file.xml')) { |config| config.strict }
xml2 = Nokogiri::XML(File.open('file.xml')) { |config| config.strict.noblanks }

xml会给你:

代码语言:javascript
代码运行次数:0
运行
复制
#<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将是:

代码语言:javascript
代码运行次数:0
运行
复制
#<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">]>]>]>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35640179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档