Techioz Blog

Nokogiri を使用して変更を XML ファイルに保存する方法

概要

次のような単純な XML ファイルがあります。

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

</user-mapping>

Nokogiriを使用してユーザーマッピングにコンテンツを追加したいと考えています。

これは私のコードです:

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

put の出力は次のとおりです。

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

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

ただし、コードが終了しても、実際の XML ファイルには何も変更されていません。 変更を XML ファイルに保存する方法を誰かが説明してもらえますか?

解決策

ファイルをメモリ内の XML ドキュメントに読み取り、必要に応じてドキュメントを変更し、ドキュメントを元のファイルにシリアル化して戻します。

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