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

需求:需要找出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 种遍历方式+性能分析!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用Java的DOM解析器来修改XML文件的某个属性。具体步骤如下: 1. 加载XML文件并创建DOM文档对象。 ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new File("example.xml")); ``` 2. 获取需要修改的元素节点。 ```java Element root = doc.getDocumentElement(); NodeList nodeList = root.getElementsByTagName("book"); Element bookElement = null; for (int i = 0; i < nodeList.getLength(); i++) { Element element = (Element) nodeList.item(i); String id = element.getAttribute("id"); if (id.equals("001")) { bookElement = element; break; } } ``` 3. 修改属性。 ```java bookElement.setAttribute("price", "19.99"); ``` 4. 将修改后的DOM文档写入XML文件。 ```java TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("example.xml")); transformer.transform(source, result); ``` 完整代码示例: ```java import java.io.File; import javax.xml.parsers.*; import org.w3c.dom.*; import javax.xml.transform.*; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; public class ModifyXML { public static void main(String[] args) { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(new File("example.xml")); Element root = doc.getDocumentElement(); NodeList nodeList = root.getElementsByTagName("book"); Element bookElement = null; for (int i = 0; i < nodeList.getLength(); i++) { Element element = (Element) nodeList.item(i); String id = element.getAttribute("id"); if (id.equals("001")) { bookElement = element; break; } } bookElement.setAttribute("price", "19.99"); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File("example.xml")); transformer.transform(source, result); System.out.println("XML file updated successfully"); } catch (Exception e) { e.printStackTrace(); } } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值