2

我在这里使用简单 XML 序列化(simple-xml-2.6.6.jar)将我的 XML 响应从 web 服务转换为 POJO 类。XML如下:

<Alerts>
        <Alert>
            <CCRDataObjectID>38</CCRDataObjectID>
            <DateTime>
                <Type>
                    <Text>Verified</Text>
                </Type>
                <ExactDateTime>2010-06-16T00:00:00Z</ExactDateTime>
            </DateTime>
            <Type>
                <Text>Allergy</Text>
            </Type>
            <Description>
                <Text>R-Tanna</Text>
            </Description>
            <Source>
                <Actor>
                    <ActorID>122</ActorID>
                </Actor>
            </Source>
            <Reaction>
                <Description>
                    <Text>rash</Text>
                </Description>
            </Reaction>
        </Alert>
        <Alert>
            <CCRDataObjectID>39</CCRDataObjectID>
            <DateTime>
                <Type>
                    <Text>Verified</Text>
                </Type>
                <ExactDateTime>2010-06-16T00:00:00Z</ExactDateTime>
            </DateTime>
            <Type>
                <Text>Allergy</Text>
            </Type>
            <Description>
                <Text>Zithromax</Text>
            </Description>
            <Source>
                <Actor>
                    <ActorID>122</ActorID>
                </Actor>
            </Source>
            <Reaction>
                <Description>
                    <Text>rash</Text>
                </Description>
            </Reaction>
        </Alert>
    </Alerts>

POJO 如下:包含警报的第一个 POJO 列表是Alerts

@Root
public class Alerts {

    @ElementList
    private List<Alert> Alerts;

    public List<Alert> getAlerts() {
        return this.Alerts;
    }

    public void setAlerts(List<Alert> alerts) {
        this.Alerts = alerts;
    }

}

实际的第二个 POJOAlert如下:

@Root(strict=false)
public class Alert {

    @Element
    private int CCRDataObjectID;

    @Element
    private DateTime DateTime;  

    @Element
    private Type Type;  

    @Element 
    private Description Description;

    @Path("Source/Actor")
    @Element        
    private int ActorID;

    @Element
    private Reaction Reaction;

    @Root
    private static class Type {

        @Element
        private String Text;        

    }

    @Root
    private static class Description {

        @Element
        private String Text;
    }

    @Root
    private static class DateTime {

        @Element
        private Type Type;

        @Element
        private String ExactDateTime;

    }

    @Root
    private static class Reaction {

        @Element
        private Description Description;
    }

    public int getCCRDataObjectID() {
        return CCRDataObjectID;
    }

    public void setCCRDataObjectID(int cCRDataObjectID) {
        CCRDataObjectID = cCRDataObjectID;
    }   

    public String getVerification(){
        return this.DateTime.Type.Text;
    }

    public String getDateTime() {
        return this.DateTime.ExactDateTime;
    }

    public String getAllergyType() {
        return this.Type.Text;
    }
    /**
     * 
     * @return Name/Description of an Allergy
     */
    public String getDescription() {
        return this.Description.Text;
    }

    public int getActorID() {
        return ActorID;
    }

    public void setActorID(int actorID) {
        ActorID = actorID;
    }

    public String getReactionDescription() {
        return this.Reaction.Description.Text;
    }

    public String getDisplayDate() {
        SimpleDateFormat sdf = new SimpleDateFormat("d MMM yyyy");
        return sdf.format(this.DateTime.ExactDateTime);     
    }
}

在解析时,我得到如下错误:

Element 'Alert' does not have a match in class com.mypck.pojo.Alerts at line 2

现在我无法更改 XML 响应,因为它正在其他地方使用。我可以用 POJO 做什么,以便我可以解析我的 XML。

4

2 回答 2

3

好的。通过教程后得到答案。我只需要告诉该列表在类警报中是内联的。

@Root
public class Alerts {

    @ElementList(inline=true)
    private List<Alert> Alerts;

    public List<Alert> getAlerts() {
        return this.Alerts;
    }

    public void setAlerts(List<Alert> alerts) {
        this.Alerts = alerts;
    }

}
于 2013-01-03T12:01:46.000 回答
1

这不应该:

@ElementList
private List<Allergy> Alerts;

@ElementList
private List<Alert> Alerts;

?

于 2013-01-02T11:27:56.853 回答