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

实现:如果字段少的话,直接复制粘贴就行了,但是字段很多,算上重复的话有几千个字段,要是复制粘贴,估计键盘会变成这样:

java xml 值动态获取 java获取xml中的属性值_字段


所以可以写个程序来实现。

思路:

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 .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 种遍历方式+性能分析!