JRuby Nokogiri XML构建器to_xml不会为兄弟元素输出换行符

时间:2011-01-31 17:57:34

标签: ruby xml jruby nokogiri

使用JRuby 1.5.6和nokogiri(JRuby为1.5.0.beta.3)

我正在尝试构建一个XML,但所有没有子节点的兄弟元素都在同一行上输出。我在to_xml选项中遗漏了什么吗?

builder.rb

require 'Nokogiri'
builder = Nokogiri::XML::Builder.new do |xml|
  xml.root do
    xml.GUID "foo"
    xml.IDInInfoSource "bar"
  end
end

期望的输出

<root>
  <GUID>foo</GUID>
  <IDInInfoSource>bar</IDInInfoSource>
</root>

生成输出

<root>
  <GUID>foo</GUID><IDInInfoSource>bar</IDInInfoSource>
</root>

1 个答案:

答案 0 :(得分:1)

这对我有用:

require 'nokogiri'

builder = Nokogiri::XML::Builder.new do |xml|
  xml.root do
    xml.Entity "xsi:type"=>"ValidEntityTypeForCCOMClass" do
      xml.GUID 'DEADBEEF'
      xml.IDInInfoSource "Hi Mom"
    end
  end
end

puts builder.to_xml
#=> <?xml version="1.0"?>
#=> <root>
#=>   <Entity xsi:type="ValidEntityTypeForCCOMClass">
#=>     <GUID>DEADBEEF</GUID>
#=>     <IDInInfoSource>Hi Mom</IDInInfoSource>
#=>   </Entity>
#=> </root>

如果它适合您,请提供简单,可重复的测试用例。 (由于依赖于尚未包含的数据和库,上面的代码无法运行。)

如果它不适合您,请列出您的Ruby和Nokogiri版本。

编辑:我确认在使用jRuby 1.5.6和Nokogiri 1.5.0.beta.4时,我看到与OP相同的无换行结果。 Ruby 1.9.2和Nokogiri 1.5.0.beta.4上也没有出现同样的问题。我认为这与libxml2与纯Java Nokogiri的行为有所区别。

编辑2 :我filed a Nokogiri bug为此。从该错误报告中注意到一件有趣的事情:jRuby版本的输出在文档不存在于其他文档之后有一个额外的换行符