Nokogiri :: XML.parse应该为换行创建单独的Text节点吗?

我有一个外部工具创建的XML文档:

  S1 First Suite   
section 1 C1 Test 1.1 Other 4 - Must Test C2 Test 1.2 Other 4 - Must Test

从irb,我执行以下操作:(输出被抑制直到最终命令)

 > require('nokogiri') > doc = Nokogiri::XML.parse(open('./test.xml')) > test_case = doc.search('case').first => #<Nokogiri::XML::Element:0x3ff75851bc44 name="case" children=[#, #<Nokogiri::XML::Element:0x3ff75851b7bc name="id" children=[#]>, #, #<Nokogiri::XML::Element:0x3ff75851b078 name="title" children=[#]>, #, #<Nokogiri::XML::Element:0x3ff75851a970 name="type" children=[#]>, #, #<Nokogiri::XML::Element:0x3ff7585190d4 name="priority" children=[#]>, #, #, #, #, #, #, #]> 

这会导致许多孩子看起来如下所示:

 # 

我想迭代这些XML节点而不必执行以下操作:

 > real_nodes = test_case.children.reject{|n| n.node_name == 'text' && n.content.strip!.empty?} 

我无法在Nokogiri文档中找到解析参数来抑制将换行视为单独的节点。 有没有办法在解析期间而不是之后执行此操作?

文本节点是漂亮打印XML的结果。 该规范不需要标记之间的空格,并且为了提高效率,可以剥离大型XML文件,以节省空间并减少传输时间,而不会牺牲数据内容。

这可能会显示正在发生的事情:

 require 'nokogiri' xml = '' Nokogiri::XML(xml).at('foo').child => nil 

标签之间没有空格,也没有文本节点。

 xml = ' ' Nokogiri::XML(xml).at('foo').child => # doc.at('foo').child.class => Nokogiri::XML::Text 

使用空格进行漂亮打印,XML在foo标记后面有一个文本节点。

查看文档 。 你可以这样做:

 doc = Nokogiri::XML.parse(open('./test.xml')) do |config| config.noblanks end 

这将加载文件而没有任何空节点。