Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
两个不同XML标记的相同pojo对象_Xml_Jaxb - Fatal编程技术网

两个不同XML标记的相同pojo对象

两个不同XML标记的相同pojo对象,xml,jaxb,Xml,Jaxb,我有两个这样的XML。一是 <?xml version="1.0" encoding="UTF-8"?> <Message> <VersNbr>1</VersNbr> <SubmrId>ABC</SubmrId> <MsgSeqNbr>00065</MsgSeqNbr> <CreateDt>20180528</CreateDt> <CreateTm>172428&l

我有两个这样的XML。一是

<?xml version="1.0" encoding="UTF-8"?>
<Message>
<VersNbr>1</VersNbr>
<SubmrId>ABC</SubmrId>
<MsgSeqNbr>00065</MsgSeqNbr>
<CreateDt>20180528</CreateDt>
<CreateTm>172428</CreateTm>
<TravelBatch>
<BtchSeqNbr>00000001</BtchSeqNbr>
<ProviderNm>Travel</ProviderNm>
<TrvlBtchCurrCd>GBP</TrvlBtchCurrCd>
</TravelBatch>
</Message>
其次是

<?xml version="1.0" encoding="UTF-8"?>
<Message>
<VersNbr>2</VersNbr>
<SubmrId>Xyz</SubmrId>
<MsgSeqNbr>000460</MsgSeqNbr>
<CreateDt>20180528</CreateDt>
<CreateTm>172428</CreateTm>
<RefBatch>
<BtchSeqNbr>00000001</BtchSeqNbr>
<ProviderNm> Travel</ProviderNm>
<TrvlBtchCurrCd>GBP</TrvlBtchCurrCd>
</RefBatch>
</Message>
我的pojo是

@XmlRootElement(name = "Message")
public class Message {

@XmlElement(name = "VersNbr")
protected int versNbr;
@XmlElement(name = "SubmrId")
protected String submrId;
@XmlElement(name = "MktCode")
protected String mktCode;
@XmlElement(name = "FileStatus")
protected String fileStatus;
@XmlElement(name = "MsgSeqNbr")
protected String msgSeqNbr;
@XmlElement(name = "CreateDt")
protected String createDt;
@XmlElement(name = "CreateTm")
protected String createTm;
@XmlElement(name = "ExprDt")
protected String exprDt;
@XmlElement(name = "HubTimeStamp")
protected String hubTimeStamp;
protected List<TravelBatch> travelBatch;
@XmlElement(name = "SettleBatch")
protected List<SettleBatch> settleBatch;
@XmlElement(name = "MessageTrailer", required = true)
protected MessageTrailer messageTrailer;
protected String isValidRec;

//getters and setters
我们能用同一个tarvelBatch对象处理TravelBatch和RefBatch标记吗? 我尝试使用@XmlElements,给出了两个单独的@XMLElement,但它没有按预期工作。
提前感谢。

在xmls中唯一不同的是一些批处理细节的周围元素。因此,您可以创建如下所示的新类:

@XmlAccessorType(XmlAccessType.FIELD)
public class BatchDetails {

    @XmlElement(name = "BtchSeqNbr")
    private String batchSequenceNumber;
    @XmlElement(name = "ProviderNm")
    private String providerName;
    @XmlElement(name = "TrvlBtchCurrCd")
    private String travelBatchCurrencyCode;
}
然后,为了处理这两个XML,您的根类将如下所示:

@XmlRootElement(name = "Message")
public class Message {

    @XmlElement(name = "VersNbr")
    protected int versNbr;
    @XmlElement(name = "SubmrId")
    protected String submrId;
    @XmlElement(name = "MktCode")
    protected String mktCode;
    @XmlElement(name = "FileStatus")
    protected String fileStatus;
    @XmlElement(name = "MsgSeqNbr")
    protected String msgSeqNbr;
    @XmlElement(name = "CreateDt")
    protected String createDt;
    @XmlElement(name = "CreateTm")
    protected String createTm;
    @XmlElement(name = "ExprDt")
    protected String exprDt;
    @XmlElement(name = "HubTimeStamp")
    protected String hubTimeStamp;

    @XmlElements({
            @XmlElement(name = "RefBatch", type = BatchDetails.class),
            @XmlElement(name = "TravelBatch", type = BatchDetails.class)
    })
    protected BatchDetails batchDetails;

    protected String isValidRec;
}
请注意带有@XmlElements注释的batchDetails字段