2015-09-18 1 views
0

У меня есть XML в формате ниже:Как анализировать XML с несколькими атрибутами для каждого элемента с помощью JAXB?

<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» с и атрибуты изменяться в широких пределах. Ниже приведен пример, который я попытался продолжить:

@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; } 

} 
} 
Смежные вопросы