使用JAXB创建具有属性和动态值的XML

问题描述:

我想使用JAXB创建XML。 它应该有属性,它的值必须来自相应类中定义的属性。使用JAXB创建具有属性和动态值的XML

当前输出将属性作为子标签给出,而不是作为主标签中的属性。

我想要的XML的结构如下。

<?xml version="1.0" encoding="UTF-8"?> 
<company> 
    <department name="hr"> 
     <branch name="hr-recruitment"> 
      <manager> Manasa </manager> 
      <phone>992222222</phone> 
      <salary> 20000 </salary> 
     </branch> 
     <branch name="hr-finance"> 
      <manager> Sunder </manager> 
      <phone>993333332</phone> 
      <salary> 50000 </salary> 
     </branch> 
    </department> 
    <department name="transport"> 
     <branch name="transport-employee"> 
      <manager> Raman </manager> 
      <phone>888888888</phone> 
      <salary> 30000 </salary> 
     </branch> 
     <branch name="transport-goods"> 
      <manager> Sheela </manager> 
      <phone>99999999</phone> 
      <salary> 75000 </salary> 
     </branch> 
    </department> 
</company> 

下面是标有JAXB注解3类:

1)company.class

@XmlRootElement(name = "tarang") 
public class Company { 

    private List<Department> listDepartments; 

    public Company(List<Department> listDepartments) { 
     this.listDepartments = listDepartments; 
    } 

    public Company() { 

    } 

    @XmlElementRef 
    public List<Department> getListDepartments() { 
     return listDepartments; 
    } 

    public void setListDepartments(ArrayList<Department> listDepartments) { 
     this.listDepartments = listDepartments; 
    } 

} 

2)Department.class

@XmlRootElement(name = "department") 
public class Department { 

    private String strDepartmentName; 

    private List<Branch> listBranchs; 

    public Department(String strDepartmentName, List<Branch> listBranchs) { 
     this.strDepartmentName = strDepartmentName; 
     this.listBranchs = listBranchs; 
    } 

    public Department() { 

    } 

    @XmlElement(name = "name") 
    public String getStrDepartmentName() { 
     return strDepartmentName; 
    } 

    public void setStrDepartmentName(String strDepartmentName) { 
     this.strDepartmentName = strDepartmentName; 
    } 

    @XmlElementRef 
    public List<Branch> getListBranchs() { 
     return listBranchs; 
    } 

    public void setListBranchs(List<Branch> listBranchs) { 
     this.listBranchs = listBranchs; 
    } 

} 

3)分支。

@XmlRootElement(name = "branch") 
public class Branch { 

    private String strName; 
    private String strManagerName; 
    private String strPhone; 
    private int intSalary; 

    public Branch(String strName, String strManagerName, String strPhone, 
      int intSalary) { 
     this.strName = strName; 
     this.strManagerName = strManagerName; 
     this.strPhone = strPhone; 
     this.intSalary = intSalary; 
    } 

    public Branch() { 
     // TODO Auto-generated constructor stub 
    } 

    @XmlElement(name = "name") 
    public String getStrName() { 
     return strName; 
    } 

    public void setStrName(String strName) { 
     this.strName = strName; 
    } 

    @XmlElement(name = "manager") 
    public String getStrManagerName() { 
     return strManagerName; 
    } 

    public void setStrManagerName(String strManagerName) { 
     this.strManagerName = strManagerName; 
    } 

    @XmlElement(name = "phone") 
    public String getStrPhone() { 
     return strPhone; 
    } 

    public void setStrPhone(String strPhone) { 
     this.strPhone = strPhone; 
    } 

    @XmlElement(name = "salary") 
    public int getIntSalary() { 
     return intSalary; 
    } 

    public void setIntSalary(int intSalary) { 
     this.intSalary = intSalary; 
    } 

} 

我目前的设计包含3个类。

1)公司2)系3)分公​​司

的关系是:

1) class Company -has a- List of Departments. 
2) class Department -has a- name (String). 
3) class Department -has a- List of Branches. 
4) class Branch -has a- name (String) 
5) class Branch -has a- manager (String) 
6) class Branch -has a- phone (String) 
7) class Branch -has a- salary (String) 

电流输出是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <tarang> 
     <department> 
      <branch> 
       <salary>50000</salary> 
       <manager>Manasa</manager> 
       <name>hr-recruitment</name> 
       <phone>999999999</phone> 
      </branch> 
      <branch> 
       <salary>40000</salary> 
       <manager>Sundar</manager> 
       <name>hr-finance</name> 
       <phone>888888888</phone> 
      </branch> 
      <name>hr</name> 
     </department> 
     <department> 
      <branch> 
       <salary>30000</salary> 
       <manager>Raman</manager> 
       <name>transport-employee</name> 
       <phone>7777777777</phone> 
      </branch> 
      <branch> 
       <salary>20000</salary> 
       <manager>Sheela</manager> 
       <name>transport-goods</name> 
       <phone>6666666666</phone> 
      </branch> 
      <name>tranport</name> 
     </department> 
    </tarang> 

部门的名称,名称分支不会被附加为属性。 请建议我在课程中的更正,其中@xmlattribute注释必须适用于我以获得所需的输出。

@XmlAttribute(name = "name") 
private String strDepartmentName; 

约XmlAttribute注释更多详情,请参见here

@XmlAttribute应该在你的Department类遵循被添加到字段声明。

+0

它应该被添加到getter方法,以得到正确的结果..! 否则我们会得到illigal注释异常.. 感谢您帮助我......! 您的回答是正确的..! – bali208

+3

+1 - @ bali208如果您在类上指定了“@XmlAccessorType(XmlAcccessType.FIELD)”,则可以将注释放在字段上:http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype- to.html –