2013-06-04 2 views
1

Я пытаюсь выяснить, как открыть XML-файл, выполнить поиск по идентификатору, заменить значение в узле и затем сохранить документ.открыть файл xml с узлом обновления nokogiri и сохранить

мой XML

<?xml version="1.0"?> 
<data> 
    <user id="1370018670618"> 
     <email>[email protected]</email> 
     <sent>false</sent> 
    </user> 
    <user id="1370018701357"> 
     <email>[email protected]</email> 
     <sent>false</sent> 
    </user> 
    <user id="1370018769724"> 
     <email>[email protected]</email> 
     <sent>false</sent> 
    </user> 
    <user id="1370028546850"> 
     <email>[email protected]</email> 
     <sent>false</sent> 
    </user> 
    <user id="1370028588345"> 
     <email>[email protected]</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. затем после этого сохраните обновленный файл.

ответ

8

Прежде всего, ваш node_update на самом деле является NodeSet, а не Node, что вы, вероятно, думаете. Вам нужен Node, если вы хотите позвонить inner_html= на него:

node_update[0].inner_html = 'true' 

Затем выписывая обновленный XML только немного стандартного файла манипулирования в сочетании с to_xml вызова:

File.open('whatever.xml', 'w') { |f| f.print(doc.to_xml) } 

В стороне, ваш вход недействителен XML. У вас есть </details>, но нет <details>.

+0

oh ничего себе. node_update [0] был проблемой! Спасибо за помощь. все это отлично работало. Я удалил задний. это было из более ранней версии. – dullmcgee

+0

Отлично работает, спасибо mate – cesarferreira

Смежные вопросы