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

Java【XML 配置文件解析】

前言

        最近考试周忙得要死,但我却不紧不慢,还有三天复习时间,考试科目几乎都还没学呢。今天更新一个算是工具类-XML文件的解析,感觉还是挺有用的,之后可以融进自己的项目里。

XML 配置文件解析

0、导入依赖

有点像我之前爬虫学的 Jsoup 一样,只不过 Jsoup 可以用来解析 HTML,这个是解析 XML。

 <dependency><groupId>org.dom4j</groupId><artifactId>dom4j</artifactId><version>2.1.1</version></dependency>

1、配置文件的两种读取方式

1.1、从同级目录读取

语法:

类名.class.getResourceAsStream("配置文件名")

案例:

编写一个数据库配置文件,放到和读取类同级的目录下:

username=root
password=123456
url=jdbc:mysql://localhost:3306/test
driver_Class5=com.mysql.jdbc.Driver
driver_Class8=com.mysql.cj.jdbc.Driver

读取: 

public static void readCurrentDir(String propertyName) throws IOException {// todo 加载同级目录下的配置文件// 1. 加载配置文件,返回输入流 (底层是通过类加载器)InputStream in = XMLParser.class.getResourceAsStream("db.properties");// 2. 实例化 Properties 工具类Properties p = new Properties();// 3. 调用 load 方法加载输入流p.load(in);// 通过 getProperty 方法输出配置文件中指定key的内容System.out.println("username: "+p.getProperty("username"));System.out.println("password: "+p.getProperty("password"));}

2、从根目录下(resources)读取

继续把上面的配置文件放到 resources 目录下:

public static void readFromResources() throws IOException {// todo 加载同级目录下的配置文件// 1. 加载配置文件,返回输入流 (底层是通过类加载器)InputStream in = XMLParser.class.getResourceAsStream("/db.properties");// 2. 实例化 Properties 工具类Properties p = new Properties();// 3. 调用 load 方法加载输入流p.load(in);// 通过 getProperty 方法输出配置文件中指定key的内容System.out.println("username: "+p.getProperty("username"));System.out.println("password: "+p.getProperty("password"));}

DOM4J是 dom4j.org 出品的一个开源 XML 解析包。DOM4J应用于 Java 平台,采用了 Java 集合框架并完全支持 DOM,SAX 和 JAXP。

2、XML 文件的解析

有了上面的铺垫,我们就可以把不同位置的 XML 文件都读取进来了,接下来介绍常用的简单解析方法。

Dom4j 解析过程

  1. 创建SAXReader对象。
  2. 调用SAXReader对象的 read() 方法,将XML文件读入内存,并返回一个Document对象。
  3. 通过Document对象的 getRootElement() 方法获取XML文件中的根节点(是一个 Element 对象)。
  4. 通过根节点的静态方法 elements() 获得一个子节点集合。
  5. 遍历根节点的所有子节点,获取需要的元素节点及其属性和文本内容。

打印 xml 文件内容的语法:

InputStream in = XMLParser.class.getResourceAsStream("/books.xml");SAXReader reader = new SAXReader();Document doc = reader.read(in);System.out.println(doc.asXML());

下面案例用到的 XML 文件。

<bookstore><book category="love"><title lang="en">黄金时代</title><author>王小波</author><year>1991</year><price>30.00</price></book>
</bookstore>

2.1、获取标签内容

public static void dom4j_forEach() throws DocumentException {InputStream in = XMLParser.class.getResourceAsStream("/books.xml");SAXReader reader = new SAXReader();Document doc = reader.read(in);Element root = doc.getRootElement();List<Element> books = root.elements();for (Element book : books) {System.out.println("category: "+book.elementText("category"));System.out.println("title: "+book.elementText("title"));System.out.println("author: "+book.elementText("author"));}}

2.2、添加一个子标签

public static void dom4j_addSubNode() throws DocumentException {InputStream in = XMLParser.class.getResourceAsStream("/books.xml");SAXReader reader = new SAXReader();Document doc = reader.read(in);Element root = doc.getRootElement();List<Element> books = root.elements();for (Element book : books) {Element publish = book.addElement("publish");publish.addAttribute("name","publishTime");publish.setText("2003");}System.out.println(doc.asXML());}

后面用到的时候有什么新用法在来更新吧。

相关文章:

  • 高防CDN在网站搭建中的优劣势分析
  • 测试工具JMeter的使用
  • VMware安装windows操作系统
  • 面试:线上问题处理
  • 基于Springboot的冬奥会科普平台(有报告),Javaee项目,springboot项目。
  • [tsai.shen@mailfence.com].faust勒索病毒数据怎么处理|数据解密恢复
  • GlobalWindow和Evictor的常用组合使用
  • CANFD一次采样点和二次采样点
  • C#中警告CA1050、CA1821、CA1822、CA1859、CA2249及处理
  • 【hive】列转行—collect_set()/collect_list()/concat_ws()函数的使用场景
  • 2.多行输入【2023.11.24】
  • 【数据结构】二叉树概念 | 满二叉树 | 完全二叉树
  • redis的一些操作
  • Servlet+JSP小型超市管理系统
  • 卷积神经网络(CNN)识别验证码
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • IDEA 插件开发入门教程
  • IDEA常用插件整理
  • Java|序列化异常StreamCorruptedException的解决方法
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 记一次用 NodeJs 实现模拟登录的思路
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 来,膜拜下android roadmap,强大的执行力
  • 设计模式走一遍---观察者模式
  • 使用putty远程连接linux
  • 数据科学 第 3 章 11 字符串处理
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • PostgreSQL之连接数修改
  • # 透过事物看本质的能力怎么培养?
  • #define
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (一) springboot详细介绍
  • (转) Android中ViewStub组件使用
  • .form文件_SSM框架文件上传篇
  • .form文件_一篇文章学会文件上传
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net - 类的介绍
  • .Net Core缓存组件(MemoryCache)源码解析
  • .net mvc部分视图
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .net流程开发平台的一些难点(1)
  • .net生成的类,跨工程调用显示注释
  • .NET委托:一个关于C#的睡前故事
  • [20160807][系统设计的三次迭代]
  • [autojs]autojs开关按钮的简单使用
  • [BJDCTF2020]The mystery of ip1