获取xml里的某个属性的值,并把值写入到文件中

该博客介绍了一个使用Java和DOM4J库批量解析XML文件,提取特定属性值,并存储到.properties文件中以创建无重复字段字典的过程。程序遍历目录下所有XML文件,用HashMap去重,最后将结果写入文本文件。
摘要由CSDN通过智能技术生成

需求:需要找出xml里的某个特定属性的值并把值复制到一个.properties文件中,目的是做成字典,进行字段映射;要求字段不能重复。

实现:如果字段少的话,直接复制粘贴就行了,但是字段很多,算上重复的话有几千个字段,要是复制粘贴,估计键盘会变成这样:
在这里插入图片描述
所以可以写个程序来实现。
思路:
1.遍历读取需要解析的所有文件
2.一个个解析xml文件(这里使用DOM4J解析),获取需要属性的值。
3.使用hashMap存放取到的值(主要目的是去重);
4:遍历hashMap,把值写入到指定的文本文件中。
代码:

新建一个maven工程,引入相关依赖:

    <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
    </dependency>
    <dependency>
        <groupId>jaxen</groupId>
        <artifactId>jaxen</artifactId>
        <version>1.1.1</version>
    </dependency>
package com.wyw;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;

public class ParseXML2 {

    private static HashMap<String, String> hashMap = new HashMap<>();

    public static void main(String[] args) throws IOException {
        //把内容输出到文件中,true表示在文本末尾添加
        FileWriter fw = new FileWriter("D:\\files\\测试数据\\文件读取练习\\dictionary.txt", true);
        List<String> files = new ArrayList<String>();
        //需要读取文件的目录
        File file = new File("D:\\files\\测试数据\\文件读取练习");
        File[] tempList = file.listFiles();
        //获取指定目录下的所有文件的路径包含文件名
        for (int i = 0; i < tempList.length; i++) {
            if (tempList[i].isFile()) {
                files.add(tempList[i].toString());
            }
        }
        //遍历读取指定目录下的所有文件
        for (String path : files) {
            readXML(path);
        }
        //遍历hashMap里的数据并把数据写入指定的文本文件中
        for (Map.Entry<String, String> entry : hashMap.entrySet()) {
            String diction = entry.getKey() + "=" + entry.getValue();
            fw.write(diction);
            // 换行
            fw.write("\r\n");
            fw.flush();
        }
        fw.close();
    }

    public static void readXML(String file) throws IOException {

        SAXReader reader = new SAXReader();
        Document doc = null;
        try {
            doc = reader.read(new File(file));
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        //1.获取根元素
        Element root = doc.getRootElement();
        //2.获取根元素下的所有子元素(通过迭代器)这里是第一个子节点
        Iterator<Element> it = root.elementIterator();
        while (it.hasNext()) {
            Element e = it.next();
            //3.获取元素input下的所有子元素(通过迭代器) 这是第二个子节点
            Iterator elementIterator = e.elementIterator("input");
            while (elementIterator.hasNext()) {
                Element element2 = (Element) elementIterator.next();
                //4.获取元素field下的所有子元素(通过迭代器) 这是第三个子节点,如果要取得数据还在下个节点的话继续遍历
                Iterator elementIterator1 = element2.elementIterator("field");
                while (elementIterator1.hasNext()) {
                    Element element3 = (Element) elementIterator1.next();
                    //5.获取field节点中name和description属性的值,并把值放入到hashMap中
                    hashMap.put(element3.attributeValue("name"), element3.attributeValue("description"));
                }

            }
        }
    }

}


知识点:
1.解析xml文件,参考:dom4j 解析xml 获取节点值和节点属性
通过Java读取xml文件内容过程解析

2.读取某个目录下的所有文件Java 读取某个目录下所有文件、文件夹

3.Java怎样往一个文件里多次写入数据

4.转载 HashMap 的 7 种遍历方式+性能分析!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值