美文网首页
解析xml的工具类 -----jackson

解析xml的工具类 -----jackson

作者: 早点起床晒太阳 | 来源:发表于2020-10-06 17:00 被阅读0次

    参考资料:https://github.com/FasterXML/jackson-dataformat-xml (官网)
    https://blog.csdn.net/neweastsun/article/details/100044167

    这里这要是讲基础的使用,这里主要讲反序列化,序列化也差不太多

    maven依赖

    <dependency>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-xml</artifactId>
      <version>2.10.1</version>
    </dependency>
    

    xml规范(顺便简单说下)

    1、xml 区分大小写
    2、xml在编写的时候最好全部大写或者全部小写

    基础代码(反序列化的)

    XmlMapper mapper = new XmlMapper();
    File file = new File(XML_PATH);
    ClusterInfoList clusterInfoList = mapper.readValue(file, ClusterInfoList.class);

    注解相关

    参考资料:https://github.com/FasterXML/jackson-dataformat-xml/wiki/Jackson-XML-annotations

    @JacksonXmlProperty

    localName 指定本地名称

    @JacksonXmlRootElement

    localName 指定root的根路径的名称,默认值为类名

    @JsonIgnoreProperties(ignoreUnknown = true)

    这个注解写在类上,用来忽略在xml中有的属性但是在类中没有的情况

    @JacksonXmlElementWrapper(useWrapping (default:true))

    这个详细说下
    这个的含义是指定XML元素用于List或者Map ,默认值userWrapping=true,代表使用包装器元素
    这句话 比较难懂 我使用一个具体示例来说下

    @Data
    @JacksonXmlRootElement(localName = "clusterinfos")
    public class ClusterInfoList {
        @JacksonXmlElementWrapper(useWrapping = false)
        @JacksonXmlProperty(localName = "cluster")
        public List<ClusterInfo> clusterinfos;
    
        public ClusterInfoList(){}
    }
    
    @Data
    public class ClusterInfo {
        private String name;
    }
    
    
    XmlMapper mapper = new XmlMapper();
    File file = new File(XML_PATH);
    ClusterInfoList clusterInfoList = mapper.readValue(file, ClusterInfoList.class);
    
    List<ClusterInfo> clusterinfos = clusterInfoList.getClusterinfos();
    for (ClusterInfo info : clusterinfos) {
        System.out.println(info.getName());
    }
    
    

    读取的xml的文件

    <?xml version="1.0" encoding="UTF-8"?>
    <clusterinfos>
        <cluster>
            <name>source</name>
        </cluster>
    
        <cluster>
            <name>aaa</name>
        </cluster>
    </clusterinfos>
    

    当使用@JacksonXmlElementWrapper(useWrapping = false) 相当于不使用包装器元素,相当于List内部的实例是不用的,使用list外层为多个实例。

    如果使用@JacksonXmlElementWrapper(useWrapping = true)或者默认 的话,对应的xml应该该为

    <?xml version="1.0" encoding="UTF-8"?>
    <clusterinfos>
        <cluster>
            <clusterinfo>
                <name>source</name>
            </clusterinfo>
            <clusterinfo>
                <name>aaa</name>
            </clusterinfo>
        </cluster>
    </clusterinfos>
    

    相关文章

      网友评论

          本文标题:解析xml的工具类 -----jackson

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