Java 使用JAXB创建具有动态标记名的XML
我必须使用JAXB创建一个XML。 但它应该有动态标记名。 从POJO的设计和应用注释来看,这是令人困惑的部分 POJO结构应该是什么,类上应该使用哪些注释 我想要的XML的结构如下所示 根标签是“公司”,一个公司有许多“部门”,每个部门有许多动态的“子部门”,每个子部门有一个“经理”、“电话”和“工资” (我对我的上述设计的效率和有效性有疑问,请证明其正确性) 以下是用JAXB注释标记的3个类: 1) 公司级Java 使用JAXB创建具有动态标记名的XML,java,xml,xml-parsing,jaxb,jaxb2,Java,Xml,Xml Parsing,Jaxb,Jaxb2,我必须使用JAXB创建一个XML。 但它应该有动态标记名。 从POJO的设计和应用注释来看,这是令人困惑的部分 POJO结构应该是什么,类上应该使用哪些注释 我想要的XML的结构如下所示 根标签是“公司”,一个公司有许多“部门”,每个部门有许多动态的“子部门”,每个子部门有一个“经理”、“电话”和“工资” (我对我的上述设计的效率和有效性有疑问,请证明其正确性) 以下是用JAXB注释标记的3个类: 1) 公司级 @XmlRootElement(name = "tarang") public cl
@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;
}
}
电流输出为:
<?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>
50000
摩纳娑
人力资源招聘
999999999
40000
圣达
人力资源财务
888888888
人力资源
30000
拉曼光谱
运输员工
7777777777
20000
希拉
运输货物
6666666666
传输
部门名称和分支名称既不会作为单独的标记追加,也不会作为属性追加。请通知注释标记中的更正以获得所需的输出。如果所有标记名都是预先知道的,那么您可以使用
@xmlementref
、@xmlementdecl
和JAXBElement
的组合来映射您的用例
<?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>
马纳萨
992222222
20000
割裂
993333332
50000
拉曼光谱
888888888
30000
希拉
99999999
75000
Hai Blasise,我在链接中看到了示例,并进行了尝试。我认为我没有以正确的方式使用注释。我没有将“部门名称”和“分支机构名称”的名称附加为属性。请检查下面的当前输出:我得到的当前输出是50000 Manasa hr招聘99999999@Blasise Doughan,我编辑了问题并添加了我使用的3个类,这将为您提供正在应用和使用的注释的图片。请再次查看编辑后的问题,并建议我更正,以获得所需的输出。
@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;
}
}
@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;
}
}
<?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>
<?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>