java实体转xml

36 篇文章 1 订阅

用的是jdk自带的javax.xml.bind.JAXBContext将对象和xml字符串进行相互转换

封装的工具类XMLUtil

package com.ddwl.api.utils;


import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;

public class XMLUtil {
    
    public static String convertToXml(Object obj) {
        StringWriter sw = new StringWriter();
        try {
            JAXBContext context = JAXBContext.newInstance(obj.getClass());
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
                    Boolean.TRUE);
            marshaller.marshal(obj, sw);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
        return sw.toString().replace("standalone=\"yes\"", "");
    }
}

java实体 

package com.ddwl.api.entity;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Message")
@XmlType(propOrder = {
        "Header",
        "Body",
})
public class Account {

    private Body Body;

    private Header Header;

    public com.ddwl.api.entity.Body getBody() {
        return Body;
    }

    public void setBody(com.ddwl.api.entity.Body body) {
        Body = body;
    }

    public com.ddwl.api.entity.Header getHeader() {
        return Header;
    }

    public void setHeader(com.ddwl.api.entity.Header header) {
        Header = header;
    }

}

main方法调用

       Body body=new Body();
        body.setWaybills(waybills);

        Header header=new Header();
        header.setMessageInformation(messageID);

        Account account =new Account();
        account.setHeader(header);
        account.setBody(body);

        String strXml= XMLUtil.convertToXml(account);

转换效果


附:

@XmlRootElement:根节点

@XmlAccessorType(XmlAccessType.FIELD): 表示使用这个类中的 private 非静态字段作为 XML 的序列化的属性或者元素。

                                                                              这里还可以选择属性,也就是使用 set/get 方法来序列化属性或者元素。

@XmlType :指定输出顺序













Java中可以使用JAXBJava Architecture for XML Binding)库将实体换为XMLJAXB提供了将Java对象和XML文档相互换的能力。 以下是一个示例代码,将Book类换为XML格式: ```java import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.annotation.XmlRootElement; import java.io.StringWriter; @XmlRootElement public class Book { private String title; private String author; private int year; private float price; public Book() {} public Book(String title, String author, int year, float price) { this.title = title; this.author = author; this.year = year; this.price = price; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public static void main(String[] args) throws Exception { Book book = new Book("Java Programming", "John Smith", 2021, 29.99f); JAXBContext jaxbContext = JAXBContext.newInstance(Book.class); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); StringWriter writer = new StringWriter(); marshaller.marshal(book, writer); System.out.println(writer.toString()); } } ``` 输出结果为: ```xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <book> <author>John Smith</author> <price>29.99</price> <title>Java Programming</title> <year>2021</year> </book> ``` 在上面的代码中,我们使用了JAXBContext.newInstance()方法来创建一个JAXBContext对象,然后使用createMarshaller()方法创建Marshaller对象,最后调用marshal()方法将Java对象换为XML格式,并将结果输出到字符串中。在Book类上使用了@XmlRootElement注解,这个注解用来指定生成XML文件的根元素名称。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tiegenZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值