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("------------------");
}
}
}
- 首先通过
FileInputStream
指定要读取的 XML 文件路径,这里使用了绝对路径,可能会降低代码的可移植性。 - 创建
SAXReader
对象用于解析 XML 文件,SAXReader
是一种基于事件驱动的 XML 解析器,适用于处理大型 XML 文件,因为它在解析过程中不会将整个 XML 文件加载到内存中。 - 通过
reader.read(fis)
读取 XML 文件并生成一个Document
对象,这个对象代表整个 XML 文档。 - 从
Document
对象中获取根元素e
,然后通过e.elements()
获取根元素下的所有子元素列表users
。 - 外层循环遍历
users
列表中的每个元素user
,打印元素名称,获取该元素的子元素列表us
和属性列表atts
。 - 内层第一个循环遍历子元素列表
us
,打印每个子元素的文本内容。 - 内层第二个循环遍历属性列表
atts
,打印每个属性的名称和值。 - 最后打印一个分隔符
------------------
,用于区分不同的元素组。
二、优缺点分析
优点:
- 使用
dom4j
库进行 XML 解析,该库功能强大,提供了丰富的 API 来操作 XML 文档。 - 通过
SAXReader
进行解析,对于大型 XML 文件具有较好的性能,不会一次性将整个文件加载到内存中。
缺点:
- 硬编码的文件路径使得代码的可维护性和可移植性较差。如果文件路径发生变化,需要修改代码中的路径。
- 缺乏错误处理的详细信息。只是简单地抛出异常,没有对异常进行更具体的处理和错误信息的输出,不利于问题的排查。
- 代码的灵活性不足。如果需要解析不同的 XML 文件或者进行更复杂的 XML 处理操作,需要对代码进行较大的修改。
三、改进建议
- 使用相对路径或配置文件来指定 XML 文件的位置,提高代码的可移植性。
- 加强错误处理,可以使用
try-catch
块捕获异常,并输出更详细的错误信息,以便于调试。 - 考虑将 XML 解析的功能封装成一个方法或类,以便于在不同的项目中复用,同时也可以提高代码的可维护性和可读性。
- 如果可能的话,可以添加一些参数来控制 XML 解析的行为,例如是否输出属性、是否递归遍历子元素等,提高代码的灵活性。