美文网首页我爱编程
xml与java对象的快速互转

xml与java对象的快速互转

作者: 爱余星痕 | 来源:发表于2018-03-06 15:39 被阅读0次

    做流程图的项目时,新的流程定义为xml的,需要对xml与java对象进行互转
    查了一下activiti的转换xml方式,发现转换太麻烦了,需要一步步的解析xml
    后面发现直接用jaxb就可以很快实现互转,而且现在这个jaxb在jdk内,不需要引入外部的解析xml的包
    具体如下:
    一.根据XML构建java对象

    @XmlRootElement(name = "mxGraphModel")
    public class MxGraphModel {
        
        private MxRoot root;
        @XmlElement(name = "root")
        public MxRoot getRoot() {
            return root;
        }
    
        public void setRoot(MxRoot root) {
            this.root = root;
        }
    
    }
    

    该java对象直接使用注解就可以声明,其他相关注解如下:
    1.@XmlRootElement,用于类级别的注解,对应xml的跟元素。通过name属性定义这个根节点的名称。
    2.@XmlAccessorType,定义映射这个类中的何种类型都需要映射到xml。(如果不存在@XmlAccessorType,默认使用XmlAccessType.PUBLIC_MEMBER注解)
      参数:XmlAccessType.FIELD: java对象中的所有成员变量。
      XmlAccessType.PROPERTY:java对象中所有通过getter/setter方式访问的成员变量。
      XmlAccessType.PUBLIC_MEMBER:java对象中所有的public访问权限的成员变量和通过getter/setter方式访问的成员变量。
      XmlAccessType.NONE: java对象的所有属性都不映射为xml的元素。
    3.@XmlAttribute,用于把java对象的属性映射为xml的属性,并可通过name属性为生成的xml属性指定别名。

    4.@XmlElement,指定一个字段或get/set方法映射到xml的节点。通过name属性定义这个根节点的名称。

    5.@XmlElementWrapper,为数组或集合定义一个父节点。通过name属性定义这个父节点的名称。

    二。执行java及xml的互转

    /**
         * xml转对象
         * 
         * @param xml
         * @return
         * @throws JAXBException
         */
        public MxGraphModel convertToGraphModel(String xml) throws JAXBException {
            StringReader reader = new StringReader(xml);
            JAXBContext jaxbContext = JAXBContext.newInstance(MxGraphModel.class);
            Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
            MxGraphModel graphModel = (MxGraphModel) jaxbUnmarshaller.unmarshal(reader);
            return graphModel;
        }
    
    /**
         * 将对象转为流程XML
         * 
         * @param graphModel
         * @return
         * @throws JAXBException
         */
        public String convertToXML(MxGraphModel graphModel) throws JAXBException {
            JAXBContext jaxbContext = JAXBContext.newInstance(MxGraphModel.class);
            StringWriter writer = new StringWriter();
            Marshaller marshaller = jaxbContext.createMarshaller();
            marshaller.marshal(graphModel, writer);
            String xmlStr = writer.toString();
            xmlStr = StringUtils.replace(xmlStr, """, "'");
            return xmlStr;
        }
    
    

    上述该方法转换简单,易明白,但唯一不足时,对XML的解析依赖整个对象,不能动态增加XML的解析,不过现阶段来说,这个办法已经足够了!

    相关文章

      网友评论

        本文标题:xml与java对象的快速互转

        本文链接:https://www.haomeiwen.com/subject/jlqrfftx.html