【问题标题】:How to convert in object an xml with repeated field iava 8如何在对象中转换具有重复字段 iava 8 的 xml
【发布时间】:2021-07-25 19:44:03
【问题描述】:

我必须在 java 对象中转换一个 xml 文件,它工作正常,直到我到达元素 TRACKING。

    <?xml version="1.0" encoding="UTF-8"?>
<ELENCO>
   <SPEDIZIONE>
      <NumSped><![CDATA[610144853]]></NumSped>
      <Bda><![CDATA[0]]></Bda>
      <DataPartenza><![CDATA[06/04/2021]]></DataPartenza>
      <SedePartenza><![CDATA[M7]]></SedePartenza>
      <LocalitaSedePartenza><![CDATA[PAVIA]]></LocalitaSedePartenza>
      <Destinatario><![CDATA[simoni c/o marcoccia multiserv]]></Destinatario>
      <IndirizzoDestinazione><![CDATA[Via Volsci,30]]></IndirizzoDestinazione>
      <CapDestinatario><![CDATA[03100]]></CapDestinatario>
      <CittaDestinazione><![CDATA[frosinone]]></CittaDestinazione>
      <SedeDestinazione><![CDATA[FROSINONE]]></SedeDestinazione>
      <LocalitaSedeDestinazione><![CDATA[Frosinone]]></LocalitaSedeDestinazione>
      <ProvinciaSedeDestinazione><![CDATA[FR]]></ProvinciaSedeDestinazione>
      <CapSedeDestinazione><![CDATA[03100]]></CapSedeDestinazione>
      <IndirizzoSedeDestinazione><![CDATA[Via Armando Vona]]></IndirizzoSedeDestinazione>
      <TelefonoSedeDestinazione><![CDATA[+39 0775 937028]]></TelefonoSedeDestinazione>
      <FaxSedeDestinazione><![CDATA[+39 0775 880500]]></FaxSedeDestinazione>
      <StatoSpedizione><![CDATA[Consegnato]]></StatoSpedizione>
      <DataConsegna><![CDATA[07/04/2021]]></DataConsegna>
      <OraConsegna><![CDATA[11:57]]></OraConsegna>
      <Firma><![CDATA[ARMANDO  SIMONI]]></Firma>
      <NumeroColli><![CDATA[1]]></NumeroColli>
      <Peso><![CDATA[0,4]]></Peso>
      <Contrassegno><![CDATA[0,00]]></Contrassegno>
      <TRACKING>
         <Data><![CDATA[07/04/21]]></Data>
         <Ora><![CDATA[11:57]]></Ora>
         <Luogo><![CDATA[Frosinone]]></Luogo>
         <Stato><![CDATA[CONSEGNATA]]></Stato>
         <Note><![CDATA[Armando  Simoni]]></Note>
         <Codice><![CDATA[906]]></Codice>
         <Data><![CDATA[07/04/21]]></Data>
         <Ora><![CDATA[09:19]]></Ora>
         <Luogo><![CDATA[Frosinone]]></Luogo>
         <Stato><![CDATA[Consegna prevista nel corso della giornata odierna]]></Stato>
         <Note />
         <Codice><![CDATA[905]]></Codice>
         <Data><![CDATA[07/04/21]]></Data>
         <Ora><![CDATA[09:16]]></Ora>
         <Luogo><![CDATA[Frosinone]]></Luogo>
         <Stato><![CDATA[Arrivata nella Sede GLS locale.]]></Stato>
         <Note />
         <Codice><![CDATA[904]]></Codice>
         <Data><![CDATA[06/04/21]]></Data>
         <Ora><![CDATA[17:50]]></Ora>
         <Luogo><![CDATA[Pavia]]></Luogo>
         <Stato><![CDATA[Partita dalla sede mittente. In transito.]]></Stato>
         <Note />
         <Codice><![CDATA[902]]></Codice>
         <Data><![CDATA[06/04/21]]></Data>
         <Ora />
         <Luogo><![CDATA[Pavia]]></Luogo>
         <Stato><![CDATA[Spedizione registrata nei nostri sistemi ma non ancora partita]]></Stato>
         <Note />
         <Codice><![CDATA[901]]></Codice>
      </TRACKING>
   </SPEDIZIONE>
</ELENCO>

在这个元素中,我有几个重复的字段,我想分成几个对象。如何在列表或数组中进行转换?

这是我在java8 Object中转换xml的代码

JAXBContext jaxbContext = JAXBContext.newInstance(Elenco.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Elenco elenco = (Elenco) jaxbUnmarshaller.unmarshal(new StringReader(readLine));

这是 Elenco 类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="ELENCO")
@XmlType(name = "", propOrder = {
    "SPEDIZIONE"
})
public class Elenco {
    private Spedizione SPEDIZIONE;

    public Elenco() {
    }
    
    public Elenco(Spedizione elenco) {
        this.SPEDIZIONE = elenco;
    }

    public Spedizione getELENCO() {
        return SPEDIZIONE;
    }

    public void setELENCO(Spedizione ELENCO) {
        this.SPEDIZIONE = ELENCO;
    }
    
}

Spedizione 类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "NumSped",
    "Bda",
    "DataPartenza",
    "SedePartenza",
    "LocalitaSedePartenza",
    "Destinatario",
    "IndirizzoDestinazione",
    "CapDestinatario",
    "CittaDestinazione",
    "SedeDestinazione",
    "LocalitaSedeDestinazione",
    "ProvinciaSedeDestinazione",
    "CapSedeDestinazione",
    "IndirizzoSedeDestinazione",
    "TelefonoSedeDestinazione",
    "FaxSedeDestinazione",
    "StatoSpedizione",
    "DataConsegna",
    "OraConsegna",
    "Firma",
    "NumeroColli",
    "Peso",
    "Contrassegno",
    "TRACKING"
})
public class Spedizione{
    private String NumSped;
    private String Bda;
    private String DataPartenza;
    private String SedePartenza;
    private String LocalitaSedePartenza;
    private String Destinatario;
    private String IndirizzoDestinazione;
    private String CapDestinatario;
    private String CittaDestinazione;
    private String SedeDestinazione;
    private String LocalitaSedeDestinazione;
    private String ProvinciaSedeDestinazione;
    private String CapSedeDestinazione;
    private String IndirizzoSedeDestinazione;
    private String TelefonoSedeDestinazione;
    private String FaxSedeDestinazione;
    private String StatoSpedizione;
    private String DataConsegna;
    private String OraConsegna;
    private String Firma;
    private String NumeroColli;
    private String Peso;
    private String Contrassegno;
    private List<Trackparcel> TRACKING;


    

    public String getNumSped() {
        return NumSped;
    }

    public void setNumSped(String NumSped) {
        this.NumSped = NumSped;
    }

    public String getBda() {
        return Bda;
    }

    public void setBda(String Bda) {
        this.Bda = Bda;
    }

    public String getDataPartenza() {
        return DataPartenza;
    }

    public void setDataPartenza(String DataPartenza) {
        this.DataPartenza = DataPartenza;
    }

    public String getSedePartenza() {
        return SedePartenza;
    }

    public void setSedePartenza(String SedePartenza) {
        this.SedePartenza = SedePartenza;
    }

    public String getLocalitaSedePartenza() {
        return LocalitaSedePartenza;
    }

    public void setLocalitaSedePartenza(String LocalitaSedePartenza) {
        this.LocalitaSedePartenza = LocalitaSedePartenza;
    }

    public String getDestinatario() {
        return Destinatario;
    }

    public void setDestinatario(String Destinatario) {
        this.Destinatario = Destinatario;
    }

    public String getIndirizzoDestinazione() {
        return IndirizzoDestinazione;
    }

    public void setIndirizzoDestinazione(String IndirizzoDestinazione) {
        this.IndirizzoDestinazione = IndirizzoDestinazione;
    }

    public String getCapDestinatario() {
        return CapDestinatario;
    }

    public void setCapDestinatario(String CapDestinatario) {
        this.CapDestinatario = CapDestinatario;
    }

    public String getCittaDestinazione() {
        return CittaDestinazione;
    }

    public void setCittaDestinazione(String CittaDestinazione) {
        this.CittaDestinazione = CittaDestinazione;
    }

    public String getSedeDestinazione() {
        return SedeDestinazione;
    }

    public void setSedeDestinazione(String SedeDestinazione) {
        this.SedeDestinazione = SedeDestinazione;
    }

    public String getLocalitaSedeDestinazione() {
        return LocalitaSedeDestinazione;
    }

    public void setLocalitaSedeDestinazione(String LocalitaSedeDestinazione) {
        this.LocalitaSedeDestinazione = LocalitaSedeDestinazione;
    }

    public String getProvinciaSedeDestinazione() {
        return ProvinciaSedeDestinazione;
    }

    public void setProvinciaSedeDestinazione(String ProvinciaSedeDestinazione) {
        this.ProvinciaSedeDestinazione = ProvinciaSedeDestinazione;
    }

    public String getCapSedeDestinazione() {
        return CapSedeDestinazione;
    }

    public void setCapSedeDestinazione(String CapSedeDestinazione) {
        this.CapSedeDestinazione = CapSedeDestinazione;
    }

    public String getIndirizzoSedeDestinazione() {
        return IndirizzoSedeDestinazione;
    }

    public void setIndirizzoSedeDestinazione(String IndirizzoSedeDestinazione) {
        this.IndirizzoSedeDestinazione = IndirizzoSedeDestinazione;
    }

    public String getTelefonoSedeDestinazione() {
        return TelefonoSedeDestinazione;
    }

    public void setTelefonoSedeDestinazione(String TelefonoSedeDestinazione) {
        this.TelefonoSedeDestinazione = TelefonoSedeDestinazione;
    }

    public String getFaxSedeDestinazione() {
        return FaxSedeDestinazione;
    }

    public void setFaxSedeDestinazione(String FaxSedeDestinazione) {
        this.FaxSedeDestinazione = FaxSedeDestinazione;
    }

    public String getStatoSpedizione() {
        return StatoSpedizione;
    }

    public void setStatoSpedizione(String StatoSpedizione) {
        this.StatoSpedizione = StatoSpedizione;
    }

    public String getDataConsegna() {
        return DataConsegna;
    }

    public void setDataConsegna(String DataConsegna) {
        this.DataConsegna = DataConsegna;
    }

    public String getOraConsegna() {
        return OraConsegna;
    }

    public void setOraConsegna(String OraConsegna) {
        this.OraConsegna = OraConsegna;
    }

    public String getFirma() {
        return Firma;
    }

    public void setFirma(String Firma) {
        this.Firma = Firma;
    }

    public String getNumeroColli() {
        return NumeroColli;
    }

    public void setNumeroColli(String NumeroColli) {
        this.NumeroColli = NumeroColli;
    }

    public String getPeso() {
        return Peso;
    }

    public void setPeso(String Peso) {
        this.Peso = Peso;
    }

    public String getContrassegno() {
        return Contrassegno;
    }

    public void setContrassegno(String Contrassegno) {
        this.Contrassegno = Contrassegno;
    }

    public List<Trackparcel> getTracking() {
        return TRACKING;
    }

    public void setTracking(List<Trackparcel> tracking) {
        this.TRACKING = tracking;
    }

        
}

最后一个,TrackingParcel 类:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "Data",
    "Ora",
    "Luogo",
    "Stato",
    "Note",
    "Codice"
})
public class Trackparcel {
    private String Data;
    private String Ora;
    private String Luogo;
    private String Stato;
    private String Note;
    private String Codice;

    public Trackparcel() {
    }

    public Trackparcel(String Data, String Ora, String Luogo, String Stato, String Note, String Codice) {
        this.Data = Data;
        this.Ora = Ora;
        this.Luogo = Luogo;
        this.Stato = Stato;
        this.Note = Note;
        this.Codice = Codice;
    }

    public String getData() {
        return Data;
    }

    public void setData(String Data) {
        this.Data = Data;
    }

    public String getOra() {
        return Ora;
    }

    public void setOra(String Ora) {
        this.Ora = Ora;
    }

    public String getLuogo() {
        return Luogo;
    }

    public void setLuogo(String Luogo) {
        this.Luogo = Luogo;
    }

    public String getStato() {
        return Stato;
    }

    public void setStato(String Stato) {
        this.Stato = Stato;
    }

    public String getNote() {
        return Note;
    }

    public void setNote(String Note) {
        this.Note = Note;
    }

    public String getCodice() {
        return Codice;
    }

    public void setCodice(String Codice) {
        this.Codice = Codice;
    }
    
    
}

在某些类中,我删除了构造函数,只是为了便于阅读。 谢谢你的帮助。

【问题讨论】:

  • Jaxb 在像这样的非标准场景中会很快变得复杂(并非不可能,但在我看来不值得这么复杂)。我只是用 JDOM 或任何其他 XML 库解析它,然后手动将文件映射到普通的 java 对象。

标签: java xml jaxb marshalling unmarshalling


【解决方案1】:

我找到了一些我可以使用并适用于我的案例的东西

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "Data",
    "Ora",
    "Luogo",
    "Stato",
    "Note",
    "Codice"
})
public class Trackparcel {
    
    private List<String> Note;

    private List<String> Data;

    private List<String> Luogo;

    private List<String> Stato;

    private List<String> Codice;

    private List<String> Ora;

    public Trackparcel() {
    }

    public Trackparcel(List<String> Note, List<String> Data, List<String> Luogo, List<String> Stato, List<String> Codice, List<String> Ora) {
        this.Note = Note;
        this.Data = Data;
        this.Luogo = Luogo;
        this.Stato = Stato;
        this.Codice = Codice;
        this.Ora = Ora;
    }

    public List<String> getNote() {
        return Note;
    }

    public void setNote(List<String> Note) {
        this.Note = Note;
    }

    public List<String> getData() {
        return Data;
    }

    public void setData(List<String> Data) {
        this.Data = Data;
    }

    public List<String> getLuogo() {
        return Luogo;
    }

    public void setLuogo(List<String> Luogo) {
        this.Luogo = Luogo;
    }

    public List<String> getStato() {
        return Stato;
    }

    public void setStato(List<String> Stato) {
        this.Stato = Stato;
    }

    public List<String> getCodice() {
        return Codice;
    }

    public void setCodice(List<String> Codice) {
        this.Codice = Codice;
    }

    public List<String> getOra() {
        return Ora;
    }

    public void setOra(List<String> Ora) {
        this.Ora = Ora;
    }
    
}

结果,我得到了元素 Note、Data、Luogo、Stato、Codice、Ora 的列表。 谢谢

【讨论】:

    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2021-10-20
    • 2020-10-01
    • 2017-11-04
    相关资源
    最近更新 更多