[英]How to create xml from java object
My xml output structure is as below and have created java ojects with this format. 我的xml输出结构如下,并以这种格式创建了Java对象。 How do i create xml using JAXB - marshalling.
我如何使用JAXB创建xml-编组。 I'm unable to set the element names and other details.
我无法设置元素名称和其他详细信息。 Facing issues in creating the xml starting with the root element itself.
从根元素本身开始创建xml时遇到的问题。
<?xml version="1.0" encoding="UTF-8"?>
<menu-details xmlns="http://www.w3.org/2001/XMLSchema">
<menu name="phone-number">
<group name"ph1">
<page-details>
<page>
<page-name>name1</page-name>
<field>
<srv_field>number</srv_field>
<ui_field>No</ui_field>
<label>Y</label>
<field>
<page-name>name2</page-name>
<field>
<srv_field>number2</srv_field>
<ui_field>No</ui_field>
<label>Y</label>
<field>
</page>
<page-details>
</group>
</menu>
</menu-details>
MenuDetails.class
package com.ui.mig.menuvo;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"menu"
})
@XmlRootElement(name = "menu-details")
public class MenuDetails {
protected List<MenuDetails.Menu> menu;
public List<MenuDetails.Menu> getMenu() {
if (menu == null) {
menu = new ArrayList<MenuDetails.Menu>();
}
return this.menu;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"group"
})
public static class Menu {
protected List<MenuDetails.Menu.Group> group;
@XmlAttribute(name = "name", namespace = "http://www.com//")
protected String name;
public List<MenuDetails.Menu.Group> getGroup() {
if (group == null) {
group = new ArrayList<MenuDetails.Menu.Group>();
}
return this.group;
}
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"pageDetails"
})
public static class Group {
@XmlElement(name = "page-details", required = true)
protected MenuDetails.Menu.Group.PageDetails pageDetails;
@XmlAttribute(name = "name", namespace = "http://www..com/")
protected String name;
@XmlAttribute(name = "type", namespace = "http://www..com//")
protected String type;
public MenuDetails.Menu.Group.PageDetails getPageDetails() {
return pageDetails;
}
public void setPageDetails(MenuDetails.Menu.Group.PageDetails value) {
this.pageDetails = value;
}
public String getName() {
return name;
}
public void setName(String value) {
this.name = value;
}
public String getType() {
return type;
}
public void setType(String value) {
this.type = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"page"
})
public static class PageDetails {
protected List<MenuDetails.Menu.Group.PageDetails.Page> page;
public List<MenuDetails.Menu.Group.PageDetails.Page> getPage() {
if (page == null) {
page = new ArrayList<MenuDetails.Menu.Group.PageDetails.Page>();
}
return this.page;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"pageName",
"field"
})
public static class Page {
@XmlElement(name = "page-name", required = true)
protected String pageName;
protected List<MenuDetails.Menu.Group.PageDetails.Page.Field> field;
public String getPageName() {
return pageName;
}
public void setPageName(String value) {
this.pageName = value;
}
public List<MenuDetails.Menu.Group.PageDetails.Page.Field> getField() {
if (field == null) {
field = new ArrayList<MenuDetails.Menu.Group.PageDetails.Page.Field>();
}
return this.field;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"fieldType",
"srvField",
"uiField",
"label",
"mandatory",
"customPattern"
})
public static class Field {
@XmlElement(name = "field-type", required = true)
protected String fieldType;
@XmlElement(name = "srv-field", required = true)
protected String srvField;
@XmlElement(name = "ui-field", required = true)
protected String uiField;
@XmlElement(required = true)
protected String label;
@XmlElement(required = true)
protected String mandatory;
@XmlElement(name = "custom-pattern", required = true)
protected MenuDetails.Menu.Group.PageDetails.Page.Field.CustomPattern customPattern;
public String getFieldType() {
return fieldType;
}
public void setFieldType(String value) {
this.fieldType = value;
}
public String getSrvField() {
return srvField;
}
public void setSrvField(String value) {
this.srvField = value;
}
public String getUiField() {
return uiField;
}
public void setUiField(String value) {
this.uiField = value;
}
public String getLabel() {
return label;
}
public void setLabel(String value) {
this.label = value;
}
public String getMandatory() {
return mandatory;
}
public void setMandatory(String value) {
this.mandatory = value;
}
public MenuDetails.Menu.Group.PageDetails.Page.Field.CustomPattern getCustomPattern() {
return customPattern;
}
public void setCustomPattern(MenuDetails.Menu.Group.PageDetails.Page.Field.CustomPattern value) {
this.customPattern = value;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"value"
})
public static class CustomPattern {
@XmlValue
protected String value;
@XmlAttribute(name = "type", namespace = "http://www..com/")
protected String type;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getType() {
return type;
}
public void setType(String value) {
this.type = value;
}
}
}
}
}
}
}
}
You don't have to create the XML manually. 您不必手动创建XML。 Just use a marshaller:
只需使用编组器即可:
try {
JAXBContext jaxbContext = JAXBContext.newInstance(MenuDetails.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(myObject, new File("C:\\output.xml"));
} catch (JAXBException e) {
// handle exception
}
The content of the specified file should be what you desire. 指定文件的内容应该是您想要的。
This also works the other way around: 这也可以通过其他方式解决:
try {
JAXBContext jaxbContext = JAXBContext.newInstance(MenuDetails.class);
Unmarshaller jaxbMarshaller = jaxbContext.createUnmarshaller();
MenuDetails myObject = (MenuDetails)jaxbMarshaller.unmarshal(new File("C:\\output.xml"));
} catch (JAXBException e) {
// handle exception
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.