前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java程序 如何优雅地读取xml文件

java程序 如何优雅地读取xml文件

作者头像
Meet相识
发布2018-09-12 16:33:36
2.8K0
发布2018-09-12 16:33:36
举报
文章被收录于专栏:技术专栏技术专栏
  • 实例xml
代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<c c1="0">
<d d1="101280101" d2="广州" d3="guangzhou" d4="广东"/>
<d d1="101280601" d2="深圳" d3="shenzhen" d4="广东"/>
<d d1="101280701" d2="珠海" d3="zhuhai" d4="广东"/>
<d d1="101280702" d2="斗门" d3="doumen" d4="广东"/>
<d d1="101280703" d2="金湾" d3="jinwan" d4="广东"/>
<d d1="101280800" d2="佛山" d3="foshan" d4="广东"/>
<d d1="101280801" d2="顺德" d3="shunde" d4="广东"/>
<d d1="101280802" d2="三水" d3="sanshui" d4="广东"/>
</c>
  • xml对应实体
代码语言:javascript
复制
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;

/**
 * @author gaowenfeng
 * @package com.gwf.gwf.weather.basic.vo
 * @describe 天气实体类与xml映射
 * @date 2018/2/20
 */
@Data
@Builder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
// 以上为lombok注解,方便生成getter/setter方法
@XmlRootElement(name = "d")  // 将类或枚举类型映射到XML元素,d对应的是每一行的标签 名<d d1="101280101" d2="广州" d3="guangzhou" d4="广东"/>
@XmlAccessorType(XmlAccessType.FIELD)  // 控制默认情况下字段还是Javabean属性序列化。
public class City {

    @XmlAttribute(name = "d1")  // 将JavaBean属性映射到XML属性。d1-d4对应的是<d d1="101280101" d2="广州" d3="guangzhou" d4="广东"/> 中的d1-d4
    private String cityId;

    @XmlAttribute(name = "d2")
    private String cityName;

    @XmlAttribute(name = "d3")
    private String cityCode;

    @XmlAttribute(name = "d4")
    private String province;
}
代码语言:javascript
复制
import lombok.Data;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;

/**
 * @author gaowenfeng
 * @package com.gwf.gwf.weather.basic.vo
 * @describe 城市列表结合
 * @date 2018/2/21
 */
@Data
@XmlRootElement(name = "c")
@XmlAccessorType(XmlAccessType.FIELD)
public class CityList {

    @XmlElement(name = "d")
    private List<City> cityList;
}
  • 转换Util
代码语言:javascript
复制
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.Reader;
import java.io.StringReader;

/**
 * @author gaowenfeng
 * @package com.gwf.weather.util
 * @describe Xml构建工具
 * @date 2018/2/21
 */
public class XmlBuilter {

    /**
     * 将Xml字符串转化为java对象
     * @param clazz
     * @param xmlStr
     * @param <T>
     * @return
     * @throws Exception
     */
    public static <T> T xmlStrToObject(Class<T> clazz,String xmlStr) throws Exception{
        Object xmlObject = null;
        // 创建Xml转化实例实例
        JAXBContext context = JAXBContext.newInstance(clazz);

        // XML转化为对象的接口
        Unmarshaller unmarshaller = context.createUnmarshaller();

        try(
                // 将字符串转换为Reader
                Reader reader = new StringReader(xmlStr)
            ){
            // 执行具体的转换逻辑
            xmlObject = unmarshaller.unmarshal(reader);
        }

        return (T)xmlObject;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.02.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档