XML文件解析
XML的解析方式分为四种:
1、DOM解析;
2、SAX解析;
3、JDOM解析;
4、DOM4J解析。
其中前两种属于基础方法,是官方提供的平台无关的解析方式;后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于java平台。
- DOM(Document Object Model)解析:是基于 XML 文档树结构的解析,整颗树加载到内存中,耗内存,可多次获取。
- SAX(Simple API for XML)解析:是基于事件流的解析。效率高,数据量小,仅一次获取 。
- DOM4J解析:融合了Dom和Sax的优点,即能保证效率,同时也可多次获取。著名的开发框架Spring和Hibernate都使用了Dom4j的功能。
今天我们就来着重讲一讲用的最多的一种,也就是第四种DOM4J解析。在此之前我们需要导入两个jar包来帮助我们完成代码。
分别是dom4j-1.6.1.jar和jaxen-1.1-beta-6.jar;
解析xml文档有两种方式
第一种:DocumentHelper
//获取文档树对象 doc
Document doc = DocumentHelper.createDocument();
//创建根节点
Element root = doc.addElement("动物");
//创建子节点
Element e1 = root.addElement("大象");
Element e2 = e1.addElement("名字");
Element e3 = e1.addElement("年龄");
Element e4 = e1.addElement("体重");
//子节点文本
e2.setText("马娇娇");
e3.setText("21");
e4.setText("1.5");
//当写好文档树之后需要写入xml文档中,若无xml文档,写好xml文档路径,会在此路径下自动生成一个新的xml文档
XMLWriter writer = new XMLWriter(new FileOutputStream(xml文件路径), OutputFormat.createPrettyPrint());
//写入
writer.write(doc);
//关闭刷新
writer.close();
那么我们可以看一下相对应目录下的xml文档
<?xml version="1.0" encoding="UTF-8"?>
<动物>
<大象>
<名字>马娇娇</名字>
<年龄>21</年龄>
<体重>1.5</体重>
</大象>
</动物>
第二种:SAXReader
使用SAXReader解析器获取根节点以及所有的子节点。
//获取解析器
SAXReader sr = new SAXReader();
//获取xml文档对象
Document doc = sr.read("D:\\workspace\\day22-java22\\src\\homework\\xml\\animals1.xml");
//查询根节点
Element root = doc.getRootElement();
//查询一级子节点
List <Element>list1 = root.elements();
//查询子节点并返回一个list集合
//遍历获取一级子节点
for (Element e: list1
) {
System.out.println(e.getName()+"-->"+e.getText());
List <Element>list = e.elements();
//获取二级子节点及其文本值
for (Element e2:list
) {
System.out.println(e2.getName()+"-->"+e2.getText());
}
}
控制台输出:
大象-->
名字-->马娇娇
年龄-->21
体重-->1.5
我们在查询xml文档的同时可以对其进行增删改的操作,感兴趣的可以去试一试。