如何使用java关键字将Java对象转换为XML对象

时间:2016-11-28 07:35:56

标签: java xml serialization

我创建了一个java类:

public class ReturnObj {

    private String returncode;
    private String returndesc;
    private Pkg pkg;
    public String getReturncode() {
        return returncode;
    }

    public void setReturncode(String returncode) {
        this.returncode = returncode;
    }

    public String getReturndesc() {
        return returndesc;
    }

    public void setReturndesc(String returndesc) {
        this.returndesc = returndesc;
    }

}

和其他班级:

public class Pkg {

    private String packagecode;
    private String cycle;
    private String price;
    private String desc;
    public String getPackagecode() {
        return packagecode;
    }

    public void setPackagecode(String packagecode) {
        this.packagecode = packagecode;
    }

    public String getCycle() {
        return cycle;
    }

    public void setCycle(String cycle) {
        this.cycle = cycle;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

我想将对象ReturnObj转换为此XML



<return>
    <returncode>1</returncode>
    <returndesc>DANG_KY_THANH_CONG</returndesc>
    <package>
        <packagecode>BD30</packagecode>
        <cycle>1</cycle>
        <price>15000</price>
        <desc> BD30</desc>
    </package>
</return>
&#13;
&#13;
&#13;

那么如何将属性pkg序列化为XML包呢?因为Java不允许将变量命名为关键字,所以包是Java中的关键字!

3 个答案:

答案 0 :(得分:0)

您可以在课程中使用JAXB marshling将对象转换为XML,这里有帮助您的链接JAXB Marshling

答案 1 :(得分:0)

您可以使用java附带的JAXB API将java对象转换为XML。

以下是解决您需求的代码。

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "return")
public class ReturnObj {

    private String returncode;
    private String returndesc;
    private Pkg pkg;

    public Pkg getPkg() {
        return pkg;
    }

    @XmlElement(name = "package")
    public void setPkg(Pkg pkg) {
        this.pkg = pkg;
    }

    public String getReturncode() {
        return returncode;
    }

    @XmlElement(name = "returncode")
    public void setReturncode(String returncode) {
        this.returncode = returncode;
    }

    public String getReturndesc() {
        return returndesc;
    }

    @XmlElement(name = "returndesc")
    public void setReturndesc(String returndesc) {
        this.returndesc = returndesc;
    }

}
   @XmlRootElement
public class Pkg {
    private String packagecode;
    private String cycle;
    private String price;
    private String desc;

    public String getPackagecode() {
        return packagecode;
    }

    @XmlElement(name="packagecode")
    public void setPackagecode(String packagecode) {
        this.packagecode = packagecode;
    }

    public String getCycle() {
        return cycle;
    }

    @XmlElement(name="cycle")
    public void setCycle(String cycle) {
        this.cycle = cycle;
    }

    public String getPrice() {
        return price;
    }

    @XmlElement(name="price")
    public void setPrice(String price) {
        this.price = price;
    }

    public String getDesc() {
        return desc;
    }

    @XmlElement
    public void setDesc(String desc) {
        this.desc = desc;
    }
}    

    import java.io.File;

    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Marshaller;

    public class JAXBExample {

        private static final String FILE_NAME = "C:\\ru\\jaxb-returnObj.xml";

        public static void main(String[] args) {
            ReturnObj returnObj = new ReturnObj();
            returnObj.setReturncode("1");
            returnObj.setReturndesc("DANG_KY_THANH_CONG");
            Pkg pkg = new Pkg();
            pkg.setCycle("1");
            pkg.setPrice("15000");
            pkg.setDesc("BD30");
            returnObj.setPkg(pkg);
            jaxbObjectToXML(returnObj);
        }

        private static void jaxbObjectToXML(ReturnObj emp) {

            try {
                JAXBContext context = JAXBContext.newInstance(ReturnObj.class);
                Marshaller m = context.createMarshaller();
                // for pretty-print XML in JAXB
                m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

                // Write to System.out, this will print the xml on console
                m.marshal(emp, System.out);

                // Write to File
                m.marshal(emp, new File(FILE_NAME));
            } catch (JAXBException e) {
                e.printStackTrace();
            }
        }

    }

<强>解释

@XmlRootElement:这是必须具有要在JAXB中使用的Object的注释。它定义了XML内容的根元素。

@XmlElement:这将创建元素。如果要在将java对象转换为xml时为xml元素指定其他名称,则可以将name属性传递给@XmlElement示例:

@XmlElement(name = "package")

执行上面的代码以查看所需的输出。

快乐编码。

答案 2 :(得分:0)

尝试xstream

XStream xstream = new XStream();
xstream.alias("package", Pkg.class);
String xml = xstream.toXML(myReturnObj);