2017-02-14 139 views
1

我卡住了。如何用相同名称的子节点解析节点? 在这个例子中,我需要带有rate属性的节点。SimpleXMLConverter解析XML节点

<xml> 
<Rates> 
    <Rates winrate_cap="9999"> 
    <Rates rate="323"/> 
    <Rates rate="343"/> 
    <Rates rate="2338"/> 
    <Rates rate="233"/> 
    </Rates> 
</Rates> 
</xml> 

我的回答是包装类:

@Root(name = "xml", strict = false) 
public class XMLResponse { 

    @ElementList(entry = "Rates") 
    public List<Rates> response; 

    public static class Rates { 

     @Attribute(name = "winrate_cap", required = false) 
     public String winrate_cup; 

     @ElementList(required = false, entry = "Rates") 
     public List<Rates> rates; 
    } 

    public static class Rates { 
     @Attribute(name = "rate", required = false) 
     public String rate; 
    } 
} 

回答

0

您是在正确的道路。由于您在这里有很多价格,所以最好使用更多上下文命名该类,并通过注释设置xml名称。

我已经分开了XMLResponseRates类,但这没有什么区别。

XMLRespone映射<xml>...</xml>部分:

@Root(name = "xml") 
public class XMLRespone 
{ 
    @Element(name = "Rates") 
    private Rates rates; 

    // ... 
} 

所有类型<Rates...>...</Rates>Rates类完成(和它的内部类,它映射结构:

@Root(name = "Rates") 
public class Rates 
{ 
    @Element(name = "Rates") 
    private RateList rates; 

    // ... 


    public static class RateList 
    { 
     @ElementList(entry = "Rates", inline = true) 
     private ArrayList<RateValue> values; 
     @Attribute(name = "winrate_cap", required = true) 
     private int winrateCap; 

     // ... 
    } 


    public static class RateValue 
    { 
     @Attribute(name = "rate", required = true) 
     private int rate; 

     // ... 
    } 

} 

反序列化的XML提供此输出(使用生成的toString()):

XMLRespone{rates=Rates{rates=RateList{values=[RateValue{rate=323}, RateValue{rate=343}, RateValue{rate=2338}, RateValue{rate=233}], winrateCap=9999}}}