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

2020-10-06  本文已影响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>
上一篇下一篇

猜你喜欢

热点阅读