Dom4J实现自定义格式XML文件读取

       最近因为工作的原因,第一次接触到需要自定义XML格式文件实现数据模板(字段)配置。通过在网上查询资料并结合自己的需求设计总结了一套自定义格式XML文件读取的实现方法,希望对同样需求的开发工作者有所帮助。本方法建立在功能运用层面上,如果对实现原理感兴趣请自行查询相关技术文档(推荐)。

第一步:本文使用Dom4J工具来解析XML文件,故需引入其Maven依赖:

<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>

第二步:自定义XML格式文件(本文尽可能多的对XML文件进行多标签组和多属性设计,以便功能具有通用性),如下:

<?xml version="1.0" encoding="UTF-8"?>
<templates>
    <template id="101">
        <property  fieldName="数据集名称"
                   field="name"
                   default=""
                   tips="请输入名称(不少于6个字符)"
                   fieldType="1"
                   rules=""/>

        <property  fieldName="简介"
                   field="description"
                   default=""
                   tips="数据简介信息(不少于10个字符)"
                   fieldType="1"
                   rules=""/>
    </template>
</templates>

第三步:方法实现

public Map<String,Object> readXMLTemplates(HttpServletRequest request){
    String realPath = request.getServletContext().getRealPath("/");
    String path = realPath + File.separator + "template" + File.separator;
    String fileName = "ProjectType.xml";
    try{
        File file = new File(path, fileName);
        SAXReader reader = new SAXReader();
        Document doc = reader.read(file);
        Element root = doc.getRootElement();
        Element e;
        // 获取 template 标签数据集
        List templates = root.elements();
        // 遍历每一个 template 对象
        for (Iterator<?> it = templates.iterator(); it.hasNext();) {
            // template 对象
            e = (Element) it.next();
            //template 标签Id值
            String id = e.attributeValue("id");
            System.out.println("标签id = "+id);
            //获取每一个 template 标签下的 property 属性集
            List properties = e.elements("property");
            //对每一个 property 的属性进行遍历
            for (Iterator<?> itx = properties.iterator(); itx.hasNext();) {
                List<Attribute> attrList = ((Element)itx.next()).attributes();
                for(Attribute attribute : attrList) {
                    System.out.println(attribute.getName()+" = "+attribute.getValue());
                }
            }
        }
    }catch (Exception e){
       e.printStackTrace();
    }
    return null;
}

Dom4J通过读取XML文件获得文档对象,通过文档对象获取XML树形结构的根节点,然后通过elements()或者elements("标签名")的方法获取当前节点下所有的子节点,最后通过attributes()方法获取每一个节点对象的属性值实现数据读取,控制台结果如下:

标签id = 101
fieldName = 数据集名称
field = name
default = 
tips = 请输入名称(不少于6个字符)
fieldType = 1
rules = 
fieldName = 简介
field = description
default = 
tips = 数据简介信息(不少于10个字符)
fieldType = 1
rules = 

以上为工具使用的总结方法,记录以作备忘。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值