Java【XML 配置文件解析】

news/2024/11/8 8:41:03/

前言

        最近考试周忙得要死,但我却不紧不慢,还有三天复习时间,考试科目几乎都还没学呢。今天更新一个算是工具类-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());}

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


http://www.ppmy.cn/news/1241459.html

相关文章

第八章 排序(下)【外部排序】

1. 外部排序 1.1 外存、内存之间的数据交换 操作系统以“块”为单位对磁盘存储空间进⾏管理&#xff0c;如&#xff1a;每块⼤⼩ 1KB 各个磁盘块内存放着各种各样的数据 磁盘的读/写以“块”为单位 数据读⼊内存后才能被修改 修改完了还要写回磁盘 外部排序&#xff1a;对大…

LangChain 10思维链Chain of Thought一步一步的思考 think step by step

LangChain系列文章 LangChain 实现给动物取名字&#xff0c;LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储&#xff0c;读取YouTube的视频文本搜索I…

运维高级-day02

一、编写系统服务启动脚本 RHEL6风格 1、Linux运行级别 Linux运行有七个级别 级别 描述 0 停机状态&#xff0c;系统默认运行级别不能设置为0&#xff0c;否则系统不能正常启动。使用init0命令&#xff0c;可关闭系统 1 单用户状态&#xff0c;此状态仅root用户可登录。用…

求集合的笛卡尔乘积

求集合的笛卡尔乘积 一&#xff1a;【实验目的】二&#xff1a;【实验内容】三&#xff1a;【实验原理】四&#xff1a;代码实现&#xff1a; 一&#xff1a;【实验目的】 通过编实现给定集合A和B的笛卡尔积CAA,DAB,EBA,FAAB,GA(A*B&#xff09;. 二&#xff1a;【实验内容】…

关于银河麒麟操作系统黑屏问题

一.问题说明 安装xx所软件后在/etc/ld.so.conf.d/下创建了一个JinCEarth.conf的配置文件&#xff0c;ldconfig使其生效&#xff0c;然后安装任意一个包&#xff0c;重启时将会黑屏 1.根本原因&#xff1a;ld.so.cache的改变使得/usr/lib/x86_64-linux-gnu/libXrandr.so.2的库…

css优化滚动条样式

css代码&#xff1a; ::-webkit-scrollbar {width: 6px;height: 6px; }::-webkit-scrollbar-track {background-color: #f1f1f1; }::-webkit-scrollbar-thumb {background-color: #c0c0c0;border-radius: 3px; }最终样式&#xff1a;

面试问题--智能指针

什么是智能指针&#xff1f; 当你在编写程序时&#xff0c;可能需要在运行时动态分配内存来存储数据。在传统的C中&#xff0c;你可能会使用 new 和 delete 操作符来手动管理内存。但是这样容易出现一些问题&#xff0c;比如忘记释放内存导致内存泄漏&#xff0c;或者释放了之…

【网络】DNS协议、ICMP协议、NAT技术

DNS协议、ICMP协议、NAT技术 一、DNS协议1、产生背景2、域名简介3、域名解析的工作流程4、使用dig工具分析DNS过程 二、ICMP协议1、ICMP介绍2、ICMP协议格式3、ping命令4、traceroute命令 三、NAT技术1、NAT技术背景2、NAT IP转换过程3、地址转换表4、NAPT技术5、重新理解路由器…