Как я могу изменить ранее установленный узел XML в Ruby?
У меня есть такая функция:
def add_auth_fields
xml = Builder::XmlMarkup.new(:target => '')
xml.instruct! :xml
xml.inquiry do |inquiry|
inquiry.authentication do |auth|
auth.username USERNAME
auth.password PASSWORD
end
end
xml
end
Как я могу получить доступ к xml.inquiry
узел в более позднее время, чтобы добавить больше данных внутри этого узла?
Если я позвоню xml.inquiry do |inquiry|
опять же, он просто добавляет еще один узел в мой XML.
Вот еще один пример, где я хочу изменить значение foo, но вместо этого он добавляет еще один узел foo в xml.
[195] pry(main)> xml_markup = Builder::XmlMarkup.new
=> <pretty_inspect/>
[196] pry(main)> xml_markup.foo 'bar'
=> "<pretty_inspect/><foo>bar</foo>"
[197] pry(main)> xml_markup.foo 'test'
=> "<pretty_inspect/><foo>bar</foo><foo>test</foo>"
1 ответ
Кажется, что Builder не поддерживает то, что вы ищете, сгенерированный XML хранится в виде строки, а не узлов или любого другого типа данных.
Вы должны реорганизовать свой код так, чтобы данные, которые вы хотите представить в XML, управлялись как минимум в переменной или как класс модели или набор классов; и отделить представление XML от хранения и логики данных.
Вы также можете попробовать другой гем, который поддерживает работу с нестроковым типом данных, например, Gyoku или Nokogiri. Например, с помощью Gyoku вы можете создать XML из простого хэша ruby и при необходимости просто отредактировать значения в хэше. Вы можете вывести текущую строку XML в любой точке, используя Gyoku.xml(my_hash)
,