xml字符串与java对象相互转换

案例类User.java

import javax.xml.bind.*;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import java.io.*;
import java.nio.charset.StandardCharsets;

@XmlRootElement(name="xml")
//@XmlRootElement关键字必须要有
@XmlAccessorType(XmlAccessType.FIELD)
public class Test implements Serializable {

    private static final long serialVersionUID = 4532246911561026611L;
    
    private String userId;

    private String userName;


    public String getUserId() {
        return userId;
    }


    public void setUserId(String userId) {
        this.userId = userId;
    }


    public String getUserName() {
        return userName;
    }


    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Override
    public String toString() {
        return "Test{" +
                "userId='" + userId + '\'' +
                ", userName='" + userName + '\'' +
                '}';
    }

    /**
     * xml字符串转java对象
     * @param xmlString xml字符串
     * @param clazz 要转的java对象
     * @param <T> 泛型
     *
     * @return T
     */
    public static <T> T xmlToBean(String xmlString, Class<T> clazz) throws Exception{
        XMLInputFactory factory = XMLInputFactory.newInstance();
        InputStream stream = new ByteArrayInputStream(xmlString.getBytes(StandardCharsets.UTF_8));
        XMLEventReader someSource = factory.createXMLEventReader(stream);

        JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
        JAXBElement<T> userElement = jaxbUnmarshaller.unmarshal(someSource, clazz);
        return userElement.getValue();
    }

    /**
     * bean对象转xml字符串
     * @param obj bean对象
     * @param clazz 要转的bean.Class
     *
     * @return object
     */
    public static String beanToXml(Object obj, Class<?> clazz) throws JAXBException {
        JAXBContext context = JAXBContext.newInstance(clazz);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK");
        StringWriter writer = new StringWriter();
        marshaller.marshal(obj, writer);
        return writer.toString();
    }

    /**
     * xml字符串转Object对象
     * @param xmlString xml字符串
     * @param load 要转的bean.Class
     *
     * @return object
     */
    public static Object xmlToObject(String xmlString, Class<?> load) throws JAXBException, IOException {
        JAXBContext context = JAXBContext.newInstance(load);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        Object object = unmarshaller.unmarshal(new StringReader(xmlString));
        return object;
    }

    public static void main(String[] args) throws Exception {
        String s = "<xml><userId>gh_36f64e81bfb8</userId><userName>username</userName></xml>";
        Object o = xmlToBean(s, Test.class);
        Test u = (Test) o;
        Test test = xmlToBean(s, Test.class);
        System.out.println(test);

        System.out.println(beanToXml(u, Test.class));
    }
}

工具类XmlUtil.java

/**
 * xml字符串转java对象
 * @param xmlString xml字符串
 * @param clazz 要转的bean.Class
 * @param <T> 泛型
 *
 * @return T
 */
 public static <T> T xmlToBean(String xmlString, Class<T> clazz) throws Exception{
     XMLInputFactory factory = XMLInputFactory.newInstance();
     InputStream stream = new ByteArrayInputStream(xmlString.getBytes(StandardCharsets.UTF_8));
     XMLEventReader someSource = factory.createXMLEventReader(stream);

     JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
     Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
     JAXBElement<T> userElement = jaxbUnmarshaller.unmarshal(someSource, clazz);
     return userElement.getValue();
 }


/**
 * bean对象转xml字符串
 * @param obj bean对象
 * @param clazz 要转的bean.Class
 *
 * @return object
 */
public static String beanToXml(Object obj, Class<?> clazz) throws JAXBException {
    JAXBContext context = JAXBContext.newInstance(clazz);
    Marshaller marshaller = context.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
    marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK");
    StringWriter writer = new StringWriter();
    marshaller.marshal(obj, writer);
    return writer.toString();
}


/**
 * xml字符串转Object对象
 * @param xmlString xml字符串
 * @param load 要转的bean.Class
 *
 * @return object
 */
public static Object xmlToObject(String xmlString, Class<?> clazz) throws JAXBException, IOException {
    JAXBContext context = JAXBContext.newInstance(clazz);
    Unmarshaller unmarshaller = context.createUnmarshaller();
    Object object = unmarshaller.unmarshal(new StringReader(xmlStr));
    return object;
}
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中,可以使用JAXB(Java Architecture for XML Binding)来实现XML字符串Java对象之间的转换。 1. 将Java对象转换XML字符串 使用JAXB的Marshaller类可以将Java对象转换XML字符串。以下是一个示例代码: ```java // 创建JAXBContext对象 JAXBContext jaxbContext = JAXBContext.newInstance(Student.class); // 创建Marshaller对象 Marshaller marshaller = jaxbContext.createMarshaller(); // 设置Marshaller的属性 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 将Java对象转换XML字符串 Student student = new Student("Tom", 18); StringWriter writer = new StringWriter(); marshaller.marshal(student, writer); String xmlString = writer.toString(); System.out.println(xmlString); ``` 2. 将XML字符串转换Java对象 使用JAXB的Unmarshaller类可以将XML字符串转换Java对象。以下是一个示例代码: ```java // 创建JAXBContext对象 JAXBContext jaxbContext = JAXBContext.newInstance(Student.class); // 创建Unmarshaller对象 Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); // 将XML字符串转换Java对象 String xmlString = "<student><name>Tom</name><age>18</age></student>"; StringReader reader = new StringReader(xmlString); Student student = (Student) unmarshaller.unmarshal(reader); System.out.println(student.getName() + ", " + student.getAge()); ``` 需要注意的是,在将Java对象转换XML字符串和将XML字符串转换Java对象时,都需要先创建JAXBContext对象。JAXBContext是线程安全的,因此建议在应用程序启动时创建一次即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值