当前位置: 首页 > article >正文

使用dom4j.jar包读取xml内的标签等信息

1.Xml文件

<?xml version="1.0" encoding="utf-8"?>

<users>
    <user1>
        <name>张三</name>
        <age>22</age>
        <sex>男</sex>
    </user1>
    <user2>
        <name>李四</name>
        <age>21</age>
        <sex>女</sex>
    </user2>
    <user3>
        <name>可乐</name>
        <age>5</age>
        <sex>男</sex>
    </user3>
    <user4 name="xx" age="13" sex="男"/>
    <user5 name="yy" age="18" sex="男"/>
    <user6 name="zz" age="23" sex="女"/>

</users>

2.

package com.test1;

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

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;


public class Test1 {
    public static void main(String[] args) throws FileNotFoundException, DocumentException {
        FileInputStream fis = new FileInputStream("E:\\Java buka\\0827\\src\\com/X.xml");
        SAXReader reader = new SAXReader();
        Document read = reader.read(fis);
        Element e = read.getRootElement();
        List<Element> users = e.elements();
        for (Element user : users) {
            System.out.println(user.getName());
            List<Element> us = user.elements();
            for (Element u : us) {
                String uu = u.getText();
                System.out.println(uu);
            }
            List<Attribute> atts = user.attributes();
            for (Attribute att : atts) {
                System.out.println(att.getName() + "=" + att.getText());
            }
            System.out.println("------------------");
        }

    }
}
  1. 首先通过FileInputStream指定要读取的 XML 文件路径,这里使用了绝对路径,可能会降低代码的可移植性。
  2. 创建SAXReader对象用于解析 XML 文件,SAXReader是一种基于事件驱动的 XML 解析器,适用于处理大型 XML 文件,因为它在解析过程中不会将整个 XML 文件加载到内存中。
  3. 通过reader.read(fis)读取 XML 文件并生成一个Document对象,这个对象代表整个 XML 文档。
  4. Document对象中获取根元素e,然后通过e.elements()获取根元素下的所有子元素列表users
  5. 外层循环遍历users列表中的每个元素user,打印元素名称,获取该元素的子元素列表us和属性列表atts
  6. 内层第一个循环遍历子元素列表us,打印每个子元素的文本内容。
  7. 内层第二个循环遍历属性列表atts,打印每个属性的名称和值。
  8. 最后打印一个分隔符------------------,用于区分不同的元素组。

二、优缺点分析

优点

  • 使用dom4j库进行 XML 解析,该库功能强大,提供了丰富的 API 来操作 XML 文档。
  • 通过SAXReader进行解析,对于大型 XML 文件具有较好的性能,不会一次性将整个文件加载到内存中。

缺点

  • 硬编码的文件路径使得代码的可维护性和可移植性较差。如果文件路径发生变化,需要修改代码中的路径。
  • 缺乏错误处理的详细信息。只是简单地抛出异常,没有对异常进行更具体的处理和错误信息的输出,不利于问题的排查。
  • 代码的灵活性不足。如果需要解析不同的 XML 文件或者进行更复杂的 XML 处理操作,需要对代码进行较大的修改。

三、改进建议

  1. 使用相对路径或配置文件来指定 XML 文件的位置,提高代码的可移植性。
  2. 加强错误处理,可以使用try-catch块捕获异常,并输出更详细的错误信息,以便于调试。
  3. 考虑将 XML 解析的功能封装成一个方法或类,以便于在不同的项目中复用,同时也可以提高代码的可维护性和可读性。
  4. 如果可能的话,可以添加一些参数来控制 XML 解析的行为,例如是否输出属性、是否递归遍历子元素等,提高代码的灵活性。

http://www.kler.cn/news/283948.html

相关文章:

  • 高级java每日一道面试题-2024年8月30日-基础篇-你对泛型了解多少?
  • 私人诊所|基于SprinBoot+vue的私人诊所管理系统(源码+数据库+文档)
  • STM32——看门狗(独立/窗口)
  • python删除一个函数 ast
  • 如何将FMEA整合到组织的质量管理体系中?
  • 百度:未来or现在 顾此失彼?
  • 如何利用智能文档处理技术,搭建供应链金融智能审单系统?
  • 《深入浅出WPF》读书笔记.9Command系统
  • 人工智能的可解释性(XAI) | 使用LIME
  • NeRF笔记
  • 发布app到ios
  • 【网络】NAT、代理服务、内网穿透
  • Substance 3D Stager for Mac/Win:高效三维场景设计利器
  • AI大模型编写多线程并发框架(六十三):监听器优化·下
  • Goolge earth studio 进阶3——路径创建与编辑
  • 15行为型设计模式——责任链模式
  • NCNN入门之编译与安装
  • Redis的内存淘汰策略- volatile-lru
  • Linux命令行更换yum源repo为阿里源-centos7
  • 【分布式注册中心】NACOS_2.3.0部署与实战
  • DPR:一种用于开放与问答任务的检索方法
  • 暴搜、深搜、回溯算法题集
  • AI如何改变科学与数学领域:陶哲轩演讲解析
  • SpringBoot+redis+aop处理黑白名单
  • PHP伪协议总结
  • QT实战项目之音乐播放器
  • ES6基础----iterator接口的使用
  • 【Android】UI拓展之滑动菜单、悬浮按钮、CoordinatorLayout布局等
  • 分布式计算架构详解以及任务调度方式
  • python用波形显示udp数据实现一个模拟示波器