DOM4J解析它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,DOM4J是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML。
以下面的xml文件为例,讲解几个java中解析xml文件常用的方法。
xml文件的解析都是将一个节点里面的内容转换为一个Element类对象,再调用Element对象的方法,获取到里面的内容。
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1001">
<name>寂静的春天</name>
<info>蕾切尔卡逊</info>
</book>
<book id="1002">
<name>环境科学导论</name>
<info>卢昌义</info>
<price>48.80</price>>
</book>
</books>
上面的第一本书只包含了name和info两个子节点,而第二本书还多包含了price节点。
解析步骤
下面是解析本地xml文件的前提步骤。通过下面几步获取到根节点。
// 1. 引入jar文件 dom4j.jar
// 2. 创建一个指向XML文件的输入流
FileInputStream fis = new FileInputStream("xml文件的地址");
//3. 创建一个XML读取工具对象
SAXReader sr = new SAXReader();
//4. 使用读取工具对象, 读取XML文档的输入流 , 并得到文档对象
Document doc = sr.read(fis);
//5. 通过文档对象, 获取XML文档中的根元素对象,并将其整体转换为一个Element对象
Element root = doc.getRootElement();
下面是解析网络xml文件的前提步骤。
//1. 获取到XML资源的输入流
URL url = new URL("在此传入目标网址");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
//2. 创建一个XML读取对象
SAXReader sr = new SAXReader();
//3. 通过读取对象 读取XML数据,并返回文档对象
Document doc = sr.read(is);
//4. 获取根节点
Element root = doc.getRootElement();
首先我们知道,上面的示例xml文件的根节点名称为books。根据获取到的根节点获取一级节点的名称。
List<Element> elements = root.elements();
for(Element e:elements){
System.out.println(e.getName());
}
//显示的结果为两个book。因为books根节点下面包含了两个book
上面xml文件中第二个book中的属性多了一个price,如何获取book里面的所有二级节点名称?(注意element方法与elements方法的区别)
这里就需要用到二级遍历。将每一个book转换为Element对象再遍历。
List<Element> elements = root.elements();
for(Element e:elements){
List<Element> es = e.elements();
//二级遍历
for(Element ee:es){
System.out.println(ee.getName());
}
System.out.println(“-----------”);
}
/*
结果为:
name
info
---------
name
info
price
---------
*/
获取节点信息
public String getText();
例:获取第一本书的name里面的内容
//首先获取根节点Element对象
Element root = doc.getRootElement();
//拿到第一个book对象
Element e = root.element("book");
//再将、根据这个book的Element对象的element方法并传入"name"获取到下一级的Element对象
Element ee = e.element("name");
//获取到内容
System.out.println(ee.getText());
//运行结果为蕾切尔卡逊
上面的步骤可以用一句话完成:
System.out.println(root.element("book").element("name").getText());
注意:
上面的方法中默认显示的是第一个book,如果想显示第二个及以后的内容,需要遍历List集合并查找出符合条件的内容。
例:显示第二本书的价格
//获取到两个book生成的Element对象集合
List<Element> elements = root.elements();
for(Element e:elements){
if(e.attributeValue("id").equals("1002")){
System.out.println(e.element("price").getText());
}
}
总结:上面简要介绍了的DOM4J解析xml文件的几种方法如下:
public List<Element> elements();
public Element element(String s);
public String getName();
public String getText();
public String attributeValue(String s);