Ruby:libxml-ruby并添加格式良好的兄弟节点

时间:2009-04-02 18:39:19

标签: xml ruby formatting libxml-ruby

鉴于我现有的XML(test.xml):

<root>
  <element>
    <child id="1" />
    <child id="2" />
    <child id="3" />
  </element>
</root>

我的红宝石代码:

require 'rubygems'
require 'xml'

parser = XML::Parser.file("test.xml")
doc = parser.parse

target = doc.find('/*/element')
target << child = XML::Node.new('child')
child['id'] = '4'

XML.indent_tree_output = true
doc.save(filename, :indent => true, :encoding => XML::Encoding::UTF_8)

我的问题是它将输出格式化为:

<root>
  <element>
    <child id="1" />
    <child id="2" />
    <child id="3" />
  <child id="4" /></element>
</root>

...后续添加内容如下:

<root>
  <element>
    <child id="1" />
    <child id="2" />
    <child id="3" />
  <child id="4" /><child id="5" /><child id="6" /></element>
</root>

想要的是:

<root>
  <element>
    <child id="1" />
    <child id="2" />
    <child id="3" />
    <child id="4" />
    <child id="5" />
    <child id="6" />
  </element>
</root>

......但我怎么得到它?

2 个答案:

答案 0 :(得分:2)

替换
parser = XML::Parser.file("test.xml")


parser = XML::Parser.file("test.xml", :options => XML::Parser::Options::NOBLANKS )

这是帮助

答案 1 :(得分:0)

如果您正在使用document.save,请确保将indent设置为true,同时确保设置了XML.indent_tree_output。像这样:

XML.indent_tree_output = true
doc.save(filename, :indent => true, :encoding => XML::Encoding::UTF_8)

Rubyforge对我不起作用,所以我无法在文档中对其进行验证,但我认为两者都需要设置为true以进行缩进和新行。