在java中使用dom4j解析xml

虽然Java中已经有了Dom和Sax这两种标准解析方式

但其操作起来并不轻松,对于我这么一个初学者来说,其中部分代码是活生生的恶心

为此,伟大的第三方开发组开发出了Jdom和Dom4j等工具

鉴于目前的趋势,我们这里来讲讲Dom4j的基本用法,不涉及递归等复杂操作

 往maven中添加的dom4j依赖如下:

<dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6</version>
        </dependency>

Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了

首先我们需要出创建一个xml文档,然后才能对其解析

xml文档:

<? xml  version="1.0" encoding="UTF-8"?>
< books >
    < book  id="001">
       < title >Harry Potter</ title >
       < author >J K. Rowling</ author >
    </ book >
    < book  id="002">
       < title >Learning XML</ title >
       < author >Erik T. Ray</ author >
    </ book >
</ books >

 

示例一:用List列表的方式来解析xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import  java.io.File;
import  java.util.List;
 
import  org.dom4j.Attribute;
import  org.dom4j.Document;
import  org.dom4j.Element;
import  org.dom4j.io.SAXReader;
 
 
 
public  class  Demo {
 
     public  static  void  main(String[] args)  throws  Exception {
         SAXReader reader =  new  SAXReader();
         File file =  new  File( "books.xml" );
         Document document = reader.read(file);
         Element root = document.getRootElement();
         List<Element> childElements = root.elements();
         for  (Element child : childElements) {
             //未知属性名情况下
             /*List<Attribute> attributeList = child.attributes();
             for (Attribute attr : attributeList) {
                 System.out.println(attr.getName() + ": " + attr.getValue());
             }*/
             
             //已知属性名情况下
             System.out.println( "id: "  + child.attributeValue( "id" ));
             
             //未知子元素名情况下
             /*List<Element> elementList = child.elements();
             for (Element ele : elementList) {
                 System.out.println(ele.getName() + ": " + ele.getText());
             }
             System.out.println();*/
             
             //已知子元素名的情况下
             System.out.println( "title"  + child.elementText( "title" ));
             System.out.println( "author"  + child.elementText( "author" ));
             //这行是为了格式化美观而存在
             System.out.println();
         }
     }
 
}

 

示例二:使用Iterator迭代器的方式来解析xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import  java.io.File;
import  java.util.Iterator;
 
import  org.dom4j.Attribute;
import  org.dom4j.Document;
import  org.dom4j.Element;
import  org.dom4j.io.SAXReader;
 
 
 
public  class  Demo {
     public  static  void  main(String[] args)  throws  Exception {
         SAXReader reader =  new  SAXReader();
         Document document = reader.read( new  File( "books.xml" ));
         Element root = document.getRootElement();
         
         Iterator it = root.elementIterator();
         while  (it.hasNext()) {
             Element element = (Element) it.next();
             
             //未知属性名称情况下
             /*Iterator attrIt = element.attributeIterator();
             while (attrIt.hasNext()) {
                 Attribute a  = (Attribute) attrIt.next();
                 System.out.println(a.getValue());
             }*/
             
             //已知属性名称情况下
             System.out.println( "id: "  + element.attributeValue( "id" ));
             
             //未知元素名情况下
             /*Iterator eleIt = element.elementIterator();
             while (eleIt.hasNext()) {
                 Element e = (Element) eleIt.next();
                 System.out.println(e.getName() + ": " + e.getText());
             }
             System.out.println();*/
             
             //已知元素名情况下
             System.out.println( "title: "  + element.elementText( "title" ));
             System.out.println( "author: "  + element.elementText( "author" ));
             System.out.println();
         }
     }
}

 运行结果:

示例三:创建xml文档并输出到文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import  java.io.File;
import  java.io.FileOutputStream;
 
import  org.dom4j.Document;
import  org.dom4j.DocumentHelper;
import  org.dom4j.Element;
import  org.dom4j.io.OutputFormat;
import  org.dom4j.io.XMLWriter;
 
 
public  class  Demo {
     public  static  void  main(String[] args)  throws  Exception {
         Document doc = DocumentHelper.createDocument();
         //增加根节点
         Element books = doc.addElement( "books" );
         //增加子元素
         Element book1 = books.addElement( "book" );
         Element title1 = book1.addElement( "title" );
         Element author1 = book1.addElement( "author" );
         
         Element book2 = books.addElement( "book" );
         Element title2 = book2.addElement( "title" );
         Element author2 = book2.addElement( "author" );
         
         //为子节点添加属性
         book1.addAttribute( "id" "001" );
         //为元素添加内容
         title1.setText( "Harry Potter" );
         author1.setText( "J K. Rowling" );
         
         book2.addAttribute( "id" "002" );
         title2.setText( "Learning XML" );
         author2.setText( "Erik T. Ray" );
         
         //实例化输出格式对象
         OutputFormat format = OutputFormat.createPrettyPrint();
         //设置输出编码
         format.setEncoding( "UTF-8" );
         //创建需要写入的File对象
         File file =  new  File( "D:"  + File.separator +  "books.xml" );
         //生成XMLWriter对象,构造函数中的参数为需要输出的文件流和格式
         XMLWriter writer =  new  XMLWriter( new  FileOutputStream(file), format);
         //开始写入,write方法中包含上面创建的Document对象
         writer.write(doc);
     }
}

 运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值