2012-03-02 9 views
3

私はRuby on Railsアプリケーションでxml-mappingを使用しています。私はxmlファイルをロードし、XMLマッピングXML-Mappingがルート要素であれば配列のロードに失敗します

XMLの例を使用してオブジェクトにそれらを解析する必要が

がここ

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

、ここでRubyのコードが

です
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> 

を働く誰もがこの問題を解決する方法を知っていますか?

答えて

0

(私はXMLマッピングの著者だ)

XPath式は常に「要素」クラスの「要素」の要素であるXMLツリー内のマッピングされたクラスのベースノードを基準にしています。したがって、その名前を要素のノードにあるXPath式に含めないでください。ちょうどそれを残して、コードは正常に動作するはずです:

class Elements 
    include XML::Mapping 

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

有効なXMLにはルートノードが1つのみ含まれています。少なくとも、JavaのSAXパーサが有効と定義しているものは、合意されているようです。

+0

いずれの場合もルートノードが1つしかありませんが、問題はもう1つレベルがあるはずです – kingpin