简体   繁体   English

如何从Java对象创建xml

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM