如何使用HappyMapper解析具有相同名称的嵌套元素

时间:2016-12-08 11:03:07

标签: ruby-on-rails ruby xml

我有一个XML文件,其中包含同名的嵌套元素,具体为:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <category>
        <name>Parent category</name>
        <category>
            <name>Child category 1</name>
        </category>
        <category>
            <name>Child category 2</name>
        </category>
    </category>
</root>

我正在使用HappyMapper gem进行此映射:

class Root
    include HappyMapper
    has_many :category, Category
end

class Category
    include HappyMapper
    has_many :category, Category
end

现在,如果我运行root = Root.parse(xml),我希望将整个树作为嵌套元素。我希望root.category.size返回1root.category.first.category返回2

相反,我也会在根目录中获取名称为category的所有元素。有没有办法如何指定has_many应该只针对直接孩子呢?

1 个答案:

答案 0 :(得分:0)

我明白了。 xpath有一个可选的has_many参数,值"."表示它只会查看直接子项。

所以解决方案是:

class Root
    include HappyMapper
    has_many :category, Category, xpath: '.'
end

class Category
    include HappyMapper
    has_many :category, Category, xpath: '.'
end