【问题标题】:How to create XML object from string using xml-mapping in Ruby如何在 Ruby 中使用 xml-mapping 从字符串创建 XML 对象
【发布时间】:2011-08-26 17:55:25
【问题描述】:

我在 Ruby(在 Sinatra 上)中使用 xml 映射来处理一些 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>

我错过了什么?

谢谢, B先生

编辑:

当我这样做时

test = login.save_to_xml

然后

login = Login.load_from_xml(test)

它有效。所以问题似乎是我正在传递一个字符串,而该方法正在等待......好吧,还有别的东西。 rubydocs 中肯定有一个 load_from_xml(string) 方法,所以不确定要在这里传递什么。我想我需要某种反向to_s?

【问题讨论】:

    标签: ruby xml mapping


    【解决方案1】:

    看起来你 save_to_xml 创建了一个 REXML::Element。既然这样可行,您可能想尝试一下:

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

    有关更详细的示例,请参阅“choice_node”部分http://xml-mapping.rubyforge.org/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-24
      • 2012-11-07
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      相关资源
      最近更新 更多