当前位置: 首页 > 工具软件 > J-TMX > 使用案例 >

Java中DOM4J解析xml文件浅析

赵光赫
2023-12-01

  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);

 类似资料: