解析xml文件,获取需要的数据并写入txt文件中

这篇具有很好参考价值的文章主要介绍了解析xml文件,获取需要的数据并写入txt文件中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

=_=  话不多说!直接上代码!=_=

1、XmlUtil.java     xml解析工具类

public class XmlUtil {

    private static String dicName = "";
    private static String dicValue = "";
    // 用于存储需要的数据
    private static List<Map<String, String>> paramlist = new ArrayList();

    /**
     * 找到所有xml文件,并进行解析
     * @param strPath 文件路径
     * @param name  检索的属性名称
     * @param value  检索的属性值
     * @throws Exception
     */
    public static void refreshFileList(String strPath, String name, String value){
        // 设置需要检索的值
        dicName = name;
        dicValue = value;
        // 创建文件对象
        File dir = new File(strPath);
        File[] files = dir.listFiles();
        if (files == null) {
            return;
        }
        // 遍历当前目录下所有的文件和文件夹
        for (int i = 0; i < files.length; i++) {
            if (files[i].isDirectory()) {  // 文件夹
                refreshFileList(files[i].getAbsolutePath(), name, value);
            } else {  // 文件
                // 判断是否为xml文件
                if (files[i].getAbsoluteFile().getName().split("\\.")[1].equals("xml")) {
                    // 解析xml文件
                    parseFile(files[i].getAbsoluteFile());
                }
            }
        }
    }

    /**
     * 将xml文件解析成Document对象
     * @param filePath
     */
    public static void parseFile(File filePath) {
        // 1.创建DocumentBuilderFactory对象
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            // 2.创建DocumentBuilder对象
            DocumentBuilder builder = factory.newDocumentBuilder();
            // 3.将xml文件解析成Document对象
            Document document = builder.parse(filePath);
            // 4.获取根节点     model:Model为标签名称
            NodeList sList = document.getElementsByTagName("model:Model");
            // 5.通过Element方式解析并获取使用字典的字段
            Map<String, String> parMap = element(sList);
            // 6.存入需要的数据
            if (!parMap.isEmpty()) {
                paramlist.add(parMap);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 用Element方式获取节点信息以及所有属性信息
     * @param list
     */
    public static Map<String, String> element(NodeList list) {
        Map<String, String> parMap = new HashMap<>();
        for (int i = 0; i < list.getLength(); i++) {
            Element element = (Element) list.item(i);
            // 获取所有attribute标签
            NodeList attribute = element.getElementsByTagName("attribute");
            for (int j = 0; j < attribute.getLength(); j++) {
                // 判断是否有属性
                if (attribute.item(j).hasAttributes()) {
                    Map<String, String> map = new HashMap<>();
                    // 存在则获取所有的属性
                    NamedNodeMap attributes = attribute.item(j).getAttributes();
                    for (int k = 0; k < attributes.getLength(); k++) {
                        // 属性名
                        String nodeName = attributes.item(k).getNodeName();
                        // 属性值
                        String nodeValue = attributes.item(k).getNodeValue();
                        // 拿到属性名称和属性值
                        if ("name".equals(nodeName)) {
                            map.put("name", nodeValue);
                        }
                        if ("value".equals(nodeName)) {
                            map.put("value", nodeValue);
                        }
                    }
                    // 判断是否使用的院系字典
                    if (dicName.equals(map.get("name")) && dicValue.equals(map.get("value"))) {
                        // 获取使用了字典的字段
                        Node parentNode = attribute.item(j).getParentNode();
                        if (parentNode.hasAttributes()) {
                            // 所有的属性
                            NamedNodeMap attributes1 = parentNode.getAttributes();
                            for (int l = 0; l < attributes1.getLength(); l++) {
                                parMap.put(attributes1.item(l).getNodeName(), attributes1.item(l).getNodeValue());
                            }
                        }
                        // 文件路径存入
                        parMap.put("url", parentNode.getOwnerDocument().getDocumentURI());
                    }
                    map.clear();
                }
            }
        }
        return parMap;
    }

    /**
     * 讲数据写入txt文件中
     * @param writePath  写入的路径
     * @throws Exception
     */
    public void writeData(String writePath) throws Exception {
        // 拼接内容
        StringBuffer stringBuffer = new StringBuffer();
        paramlist.forEach(e -> {
            stringBuffer.append(e.get("url") + "      =======      " + e.get("caption") + "      =======      " + e.get("name") + "\n");
        });
        File file = new File(writePath);
        File parentFile = file.getParentFile();
        // 文件夹不存在,创建文件夹
        if (!parentFile.exists()) {
            parentFile.mkdirs();
        }
        // 创建文件
        file.createNewFile();
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(fileOutputStream));
        // 写入数据
        writer.write(String.valueOf(stringBuffer));
        writer.close();
        System.out.println("文件写入完毕");
    }
}

 2、测试代码

public static void main(String[] args) throws Exception {
        long a = System.currentTimeMillis();
        XmlUtil xmlUtil = new XmlUtil();
        // 设置需要检索的属性名和值
        xmlUtil.refreshFileList("D:\\my\\file_test", "dic", "d-b122-sad-2d3q-12");
        xmlUtil.writeData("D:\\my\\outfile\\file1.txt");
        System.out.println("消耗时长:" + (System.currentTimeMillis() - a));

}

解析xml方式还有很多种,这只是其中一种,可以参考:Java XML解析 - 利用dom(org.w3c.dom)解析XML

 文章来源地址https://www.toymoban.com/news/detail-634446.html

到了这里,关于解析xml文件,获取需要的数据并写入txt文件中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Java]_[初级]_[使用SAX流的方式写入XML文件]

    文件的写入目前没有发现可以增量写入的,只能是完全重新写入。对于大量数据需要写入 XML 文件,还是和读 XML 文件一样,不需要生成 DOM 模型能节省不少的内存和指令。 在 java 标准库里,也是有相关的SAX类来写入数据流, StreamResult(OutputStream) 负责把数据写入输出流。 之后

    2024年02月10日
    浏览(54)
  • java读取并解析txt文件

    利用org.json即可实现 先利用IO流读取txt文件,读取每行内容并转为普通字符串(json形式的格式一定要正确),再将其转为JSONObject对象,通过JSONObject对象来取不同类型的值。 txt文件内容格式如下: 代码如下(示例): 如果txt文件的格式不符合json格式要求的话,会在JSONObjec

    2024年02月16日
    浏览(47)
  • java解析xml文件

    MyContentHandler类继承自DefaultHandler,是一个自定义的内容处理器。在该类中重写了startElement()、endElement()和characters()方法,以处理XML解析的不同事件。

    2024年02月13日
    浏览(46)
  • Java如何快速读取&解析JSON数据(文件),获取想要的内容?

    手打不易,如果转摘,请注明出处! 注明原文: https://zhangxiaofan.blog.csdn.net/article/details/132764186 目录 前言 准备工作 Json数据(示例) 解析Json文件 第一步:创建一个空类 第二步:使用 Gsonformat 插件  第三步:复制Json内容,创建对应类 第四步:读取Json文件,提取目标数据

    2024年02月05日
    浏览(73)
  • Java中解析XML文件

            XML(EXtensible Markup Language),可扩展标记语言,相比于HTML可以自定义标签,不遵循W3C标准         XML特点:跨平台、跨语言、跨系统。XML与操作系统、编程语言的开发平台无关。         XML作用:①数据交互②使用XML文件配置应用程序和网站 1.文档声明 包括文档

    2024年02月09日
    浏览(48)
  • 统计数据集中目标大、中、小个数【需要用到yolo的txt标注文件数据,其他格式数据不一定适用】

    统计数据集中目标大、中、小个数 最近看到一篇论文,其中在数据集介绍部分统计了大、中、小目标信息。因此,为了获取数据集的统计信息,我参考了作者写的代码基于tensorpack统计coco数据集中大、中、小目标的数量 精简版代码如下(内有多个参数需要修改,仔细查看注释

    2024年02月13日
    浏览(43)
  • Java 文件处理完全指南:创建、读取、写入和删除文件详细解析

    文件处理是任何应用程序的重要部分。Java 提供了许多用于创建、读取、更新和删除文件的方法。 Java 文件处理 Java 中的文件处理主要通过 java.io 包中的 File 类完成。该类允许我们处理文件,包括创建、读取、写入和删除文件。 要使用 File 类,我们首先需要创建该类的对象,

    2024年03月18日
    浏览(62)
  • Python — 获取电脑串口数据并保存到txt文件

    打开设备管理器,双击端口设备,点击端口设置,这里面的参数需要与下面代码中的参数保持一致。 注意事项: 1、设置匹配的波特率; 2、设置对应的串口号; 以下是一段Python代码,可以读取 Windows 电脑上串口的数据并将其保存到一个文本文件中: 请注意, 上述代码中的

    2024年02月11日
    浏览(43)
  • C++ 写入txt文件内容并追加内容

    咨询通义千问的“C++ 写入txt文件内容并追加内容”: 可以使用ofstream类来写入txt文件内容。若想追加内容,可以使用ios::app标志来创建输出流对象,然后在写入时将其设置为ios::app。以下是一个示例代码: 在这个例子中,我们创建了一个名为“example.txt”的输出流对象,并将

    2024年02月11日
    浏览(43)
  • C++对txt文件的写入读取操作

    摘自c++中文网 ifstream 是输入文件流(就是通过它定义的对象获取文件中的内容) ofstream 是输出文件流(将内容写入文件) 注意 :要使用输入输出文件流要包含头文件 #includefstream 首先要用 ofstream 定义一个输入对象 ofstream outf; 这里的outf可以自定义 接着用 outf.open(文件路径) 打

    2024年02月13日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包