思路一:节点比较少的时候可以直接使用字符串拼接的方式

思路二:把文本转对象,再把对象转xml

1.把文本转对象

文本转对象(上一篇文章)

2.改造对象

属性的使用 @XmlAttribute

节点的使用@XmlElement

增加get,set ,有参无参构造方法

@XmlAccessorType

类级别的注解。定义这个类中的何种类型需要映射到XML。解释起来有点拗口,可以通过它的属性值更好理解这个参数的意义。

参数 value

参数 value 可以接受4个指定值,这几个值是枚举类型,方便调用:

  • XmlAccessType.FIELD:映射这个类中的所有字段到XML
  • XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XML
  • XmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)
  • XmlAccessType.NONE:不映射

3.解析对象

import lombok.extern.slf4j.Slf4j;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import java.io.ByteArrayOutputStream;  

public static String AvaFailXml(EnvelopeDTO envelopeDTO) {

    try {
      // 获取上下文对象
      JAXBContext context = JAXBContext.newInstance(EnvelopeDTO.class);
      // 根据上下文获取marshaller对象
      Marshaller marshaller = context.createMarshaller();
      // 设置编码字符集
      marshaller.setProperty(Marshaller.JAXB_ENCODING, "GBK");
      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
      marshaller.marshal(envelopeDTO, byteArrayOutputStream);
      // 生成XML字符串
      return new String(byteArrayOutputStream.toByteArray());
    } catch (Exception e) {
      log.error("XML:解析异常-----" + e.getMessage(), e);
    }
    return "";
  }
  public void vation(HttpServletRequest request , HttpServletResponse response) throws IOException {
    String result = "";
    String xml = IOUtils.toString(request.getInputStream(), "UTF-8");
    
      result =Service.canlBook(xml);
      response.setCharacterEncoding("UTF-8");
      response.setContentType("text/xml;charset=UTF-8");
      response.getWriter().println(result);
  }

优化封装性能相差十倍

package com.shands.reservationcenter.util;

import com.shands.reservationcenter.pojo.request.col.*;
import lombok.extern.slf4j.Slf4j;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.ByteArrayOutputStream;
import java.io.StringWriter;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 封装了XML转换成object,object转换成XML的代码
 *
 * @author Steven
 */
@Slf4j
public class XMLUtil {

  private static final ConcurrentHashMap<Class, JAXBContext> jaxbContMap = new ConcurrentHashMap<>(8);




  public static <T> String objectToXmlStr(T t) {
    try {
      JAXBContext jaxbContext = jaxbContMap.get(t.getClass());
      if (jaxbContext == null) {
        synchronized (t.getClass()) {
          jaxbContext = JAXBContext.newInstance(t.getClass());
          jaxbContMap.put(t.getClass(), jaxbContext);
        }
      }
      Marshaller marshaller = jaxbContext.createMarshaller();
      marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
      marshaller.marshal(t, byteArrayOutputStream);
      return byteArrayOutputStream.toString();
    } catch (JAXBException e) {
      log.error("XML:解析异常-----" + e.getMessage(), e);
    }
    return "";
  }


}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐