如果有这样的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;
}
此致
答案 0 :(得分:0)
如果元素差异很大,那么您必须手动完成一些工作 - 但是,它并不多:
Converter
,例如。 ListItemConverter
@Convert
注释AnnotationStrategy
@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());
// ...