鉴于我现有的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>
......但我怎么得到它?
答案 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以进行缩进和新行。