Как создать XML-объект из строки, используя xml-отображение в Ruby - PullRequest
1 голос
/ 17 мая 2011

Я использую xml-отображение в Ruby (на Sinatra) для некоторых вещей XML. Обычно я следую этому уроку: http://xml -mapping.rubyforge.org / . Я могу создавать объекты и записывать их в строки XML, используя

login.save_to_xml.to_s

Но когда я пытаюсь

login = Login.load_from_xml(xml_string)

Я получаю следующую ошибку:

XML::MappingError - no value, and no default value: Attribute username not set (XXPathError: path not found: username):

Вот строка XML, которую я получаю:

<login><username>ali</username><password>baba</password></login>

Вот как выглядит класс:

class Login
  include XML::Mapping

  text_node :username, "username"
  text_node :password, "password"
end

Таким образом, имя класса одинаково, узлы названы одинаково. Я на самом деле получаю ту же самую строку, когда создаю экземпляр моего объекта и заполняю его ali / baba:

test = Login.new
test.username = "ali"
test.password = "baba"
p test.save_to_xml.to_s

<login><username>ali</username><password>baba</password></login>

Что мне не хватает?

Спасибо, МРБ

EDIT:

Когда я делаю

test = login.save_to_xml

А потом

login = Login.load_from_xml(test)

это работает. Таким образом, проблема заключается в том, что я передаю строку, в то время как метод ожидает ... ну, что-то еще. В rubydocs определенно есть метод load_from_xml (string), так что не знаете, что здесь передать. Я думаю, мне нужен какой-то обратный ход to_s?

1 Ответ

2 голосов
/ 17 мая 2011

Похоже, вы save_to_xml создаете REXML :: Element. Поскольку это работает, вы можете попробовать:

Login.load_from_xml(REXML::Document.new(xml_string).root)

Более подробный пример см. В разделе "choice_node" http://xml -mapping.rubyforge.org /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...