顺便说一句,您的输入不是有效的XML。你有
我想弄清楚如何打开xml文件,按id搜索,替换节点中的值,然后重新保存文档。
我xml<?xml version="1.0"?>
<data>
<user id="1370018670618">
<email>1@1.com</email>
<sent>false</sent>
</user>
<user id="1370018701357">
<email>2@2.com</email>
<sent>false</sent>
</user>
<user id="1370018769724">
<email>3@3.com</email>
<sent>false</sent>
</user>
<user id="1370028546850">
<email>4@4.com</email>
<sent>false</sent>
</user>
<user id="1370028588345">
<email>5@5.com</email>
<sent>false</sent>
</user>
</data>
打开并查找节点的代码
xml_content = File.read("/home/mike/app/users.xml")
doc = Nokogiri::XML(xml_content)
node_update = doc.search("//user[@id='1370028588345'] //sent")
node_update.inner_html ##returns value of "sent"
我被卡住的部分实际上是更新节点。node_update.inner_html = "true"
返回inner_html
的方法错误。然后保存更新后的文件。
首先,您的node_update
实际上是NodeSet
,而不是您可能认为的Node
。如果你想调用inner_html=
,你需要一个Node
:
node_update[0].inner_html = 'true'
然后写出更新的XML只是一点标准的文件操作,结合to_xml
调用:
File.open('whatever.xml', 'w') { |f| f.print(doc.to_xml) }
顺便说一句,您的输入不是有效的XML。你有
</details>
但是没有<details>