2017-02-14 4 views
1

막혔습니다. 어떻게 같은 이름의 자식 노드를 가진 노드를 파싱합니까? 이 예제에서는 속도 특성을 가진 노드가 필요합니다.SimpleXMLConverter parse xml nodes

<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

. 여기에 요금이 많으므로 더 많은 컨텍스트로 클래스 이름을 지정하고 Annotation을 통해 xml 이름을 설정하십시오.

XMLResponseRates 클래스를 구분했지만 차이는 없습니다.

클래스 XMLRespone<xml>...</xml> 부분을 매핑합니다 <Rates...>...</Rates>에 대한

@Root(name = "xml") 
public class XMLRespone 
{ 
    @Element(name = "Rates") 
    private 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}}}