rubyxmlnokogiri

How to save my changes in XML file with Nokogiri


I have the following simple XML file.

<?xml version="1.0"?>
<user-mapping>

</user-mapping>

I want to add content to the user mapping using Nokogiri.

This is my code:

f = File.open("exam.xml")
doc = Nokogiri::XML(f)
puts doc.to_s
map = doc.at_css "user-mapping"
map.content = "Gholam"
puts map.to_s
doc.to_xml
f.close

The output of the puts are:

<?xml version="1.0"?>
<user-mapping>

</user-mapping>
<user-mapping>Gholam</user-mapping>

But when the code ends, nothing has been change in the actual XML file. Can anyone explain to me how to save my changes in the XML file?


Solution

  • Read the file into an in-memory XML document, modify the document as needed, then serialize the document back into the original file:

    filename = 'exam.xml'
    xml = File.read(filename)
    doc = Nokogiri::XML(xml)
    # ... make changes to doc ...
    File.write(filename, doc)