2015-09-18 68 views
0

我有以下格式的XML:如何使用JAXB爲每個元素解析具有多個屬性的XML?

<fld-03 m="01" d="01" y="1965" sex-m="" sex-f="1"></fld-03> 
<fld-04 last="lastname" first="firstname" middle=""></fld-04> 
<fld-05 addr="Richardson" city="Dallas" state="TX" zip="75080" phone=""></fld-05> 
<fld-06 self="" spouse="1" child="" other=""></fld-06> 
<fld-07 addr="" city="" state="" zip="" phone=""></fld-07> 

有33這樣的「FLD」 S和屬性變化很大。 下面是我試圖進行樣本:

@XmlRootElement(name = "myroot") 
class Formxml implements Serializable{ 

    @XmlElement (name="fld-00") 
    private Fld00 fld00 = new Fld00(); 

    public class Fld00 { 
     private String payer; 
     @XmlAttribute(name = "payer", required = true) 
     String getPayer() { 
      return payer 
     } 
     void setPayer(String payer) { 
      this.payer = payer 
     } 
    } 
} 

這不起作用,因爲類Fld00是一個非靜態內部類。

當我將其更改爲靜態類並添加XmlAccessType.FIELD時,會拋出"Class has two properties of the same name "payer""異常。 下面是一個靜態類代碼:

@XmlRootElement(name = "Claims") 
class Formxml implements Serializable{ 

    @XmlElement (name="fld-00") 
    private Fld00 fld00 = new Fld00(); 
    @XmlAccessorType(XmlAccessType.FIELD) 
    public static class Fld00 { 
     private String payer; 
     @XmlAttribute(name = "payer", required = true) 
     String getPayer() { 
      return payer 
     } 
     void setPayer(String payer) { 
      this.payer = payer 
     } 
    } 
} 

請讓我知道如果你找到一種方式使用JAXB進行。

謝謝

回答

0

下面是一個能夠處理XML的類,正如您所描述的那樣。如果您將fld-xx的類作爲單獨的類編寫,而不是我稱爲RecordType的靜態類,那將更簡單(使用)。

請注意,這些靜態類的寫入方式存在細微差別:註釋@XmlAttribute已附加到字段而不是方法。

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "RecordType", propOrder = { 
    "fld03", 
    "fld04" 
}) 
public class RecordType { 

@XmlElement(name = "fld-03", required = true) 
protected RecordType.Fld03 fld03; 
@XmlElement(name = "fld-04", required = true) 
protected RecordType.Fld04 fld04; 

public RecordType.Fld03 getFld03() { return fld03; } 
public void setFld03(RecordType.Fld03 value) { 
    this.fld03 = value; 
} 
public RecordType.Fld04 getFld04() { return fld04; } 
public void setFld04(RecordType.Fld04 value) { 
    this.fld04 = value; 
} 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "") 
public static class Fld03 { 
    @XmlAttribute(name = "m", required = true) 
    protected int m; 

    public int getM() { return m; } 
    public void setM(int value) { this.m = value; } 
} 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "") 
public static class Fld04 { 
    @XmlAttribute(name = "lastname", required = true) 
    protected String lastname; 

    public String getLastname() { return lastname; } 
    public void setLastname(String value) { this.lastname = value; } 

} 
} 
相關問題