如果XML-Mapping是根元素,则无法加载数组

时间:2012-03-02 13:10:34

标签: ruby-on-rails ruby xml ruby-on-rails-3

我在我的ruby on rails app中使用xml-mapping。

我需要加载xml文件并使用xml-mapping

将其解析为对象

xml示例在这里

<?xml version="1.0" encoding="UTF-8"?>
<elements type="array">
  <element></element>
  <element></element>
  ...
</elements>

这是红宝石代码

require 'xml/mapping'

class Macro; end

class Elements
  include XML::Mapping

  array_node :elements, "elements","element" :class => Element
end

class Element
  include XML::Mapping

  text_node :name, "name"
  text_node :description, "description"      
end

问题是当我使用Elements.load_from_file("my.xml")它不加载数组时,但是如果我将根节点添加到xml它就可以工作。

这个xml工作

<?xml version="1.0" encoding="UTF-8"?>
<mynode>
<elements type="array">
  <element></element>
  <element></element>
  ...
</elements>
<mynode>

有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

有效XML仅包含一个根节点。至少Java中的SAX解析器定义为有效,因此似乎已达成一致。

答案 1 :(得分:0)

(我是xml映射作者)

XPath表达式始终相对于XML树中的映射类的基节点,它是“Elements”类的“elements”元素。因此,您不得在Elements的节点中的XPath表达式中包含该名称。只需将其保留,代码就可以运行:

class Elements
  include XML::Mapping

  array_node :elements, "element", :class => Element
end