2009-04-02 5 views
1

Compte tenu de mon XML existant (test.xml):Ruby: libxml-rubis et en ajoutant nœuds frères bien formatés

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

Et mon code ruby:

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) 

Mon problème est que les formats la sortie comme ceci:

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

... avec des ajouts ultérieurs qui ressemble à ceci:

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

Ce que je VEUX est ceci:

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

... mais comment puis-je la?

Répondre

2

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

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

que Aidons

0

Si vous utilisez document.save, veillez à définir indent sur true. Assurez-vous également que XML.indent_tree_output est défini. Quelque chose comme ceci:

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

Rubyforge ne fonctionne pas pour moi je ne peux pas le vérifier dans la documentation, mais je pense que les deux ont besoin d'être mis à true pour indenter et de nouvelles lignes de travail.

+0

oublié d'ajouter cette ligne dans ma question, mais il était là dans mon dossier d'origine et j'avais encore la question. "test.xml" est originellement créé à partir d'une autre section de mon code; J'ai juste des problèmes en ajoutant des noeuds dans un dossier existant. Rubyforge ne travaille pas pour moi non plus ... – neezer

Questions connexes