从xml中读取未知元素

时间:2016-03-11 02:27:50

标签: java android xml retrofit simple-framework

如果有这样的XML文件:

run()

如何阅读名称总是不同的元素? <List> <ListItem> <Element1>foo</Element1> </ListItem> <ListItem> <Element2>another foo</Element2> </ListItem> <ListItem> <Element3>foo foo</Element3> </ListItem> <ListItem> <Element4>foooo</Element4> </ListItem> <ListItem> <Element5>foo five</Element5> </ListItem> </List> 标记始终相同,但元素始终具有不同的名称..

我在这一点上陷入困​​境:

<ListItem>

最后我想像这样使用它:

@Root(name = "ListItem")
public class ListItem
{
    @Element(name = ?????)
    String Element;
}

此致

1 个答案:

答案 0 :(得分:0)

如果元素差异很大,那么您必须手动完成一些工作 - 但是,它并不多:

  1. 实施Converter,例如。 ListItemConverter
  2. @Convert注释
  3. 启用它
  4. 为您的序列化程序设置AnnotationStrategy
  5. @Root(name = "List")
    public class ExampleList
    {
        @ElementList(inline = true)
        private List<ListItem> elements;
    
        /* ... */
    
    
        @Root(name = "ListItem")
        @Convert(ListItemConverter.class)
        public static class ListItem
        {
            private final String text;
    
    
            public ListItem(String text)
            {
                this.text = text;
            }
    
            /* ... */
        }
    
        static class ListItemConverter implements Converter<ListItem>
        {
            @Override
            public ListItem read(InputNode node) throws Exception
            {
                final InputNode child = node.getNext();
    
                if( child != null )
                {
                    /*
                     * If you need the 'Element*' too:
                     * child.getName()
                     */
                    return new ListItem(child.getValue());
                }
    
                return null;
            }
    
    
            @Override
            public void write(OutputNode node, ListItem value) throws Exception
            {
                // Implement if you also need to write ListItem's
                throw new UnsupportedOperationException("Not supported yet.");
            }
        }
    
    }
    

    不要忘记设置AnnotationStrategy,否则@Convert不会工作:

    Serializer ser = new Persister(new AnnotationStrategy());
    // ...