同样为xml解析器,与jaxp不同的是,dom4j不属于javaSE的一部分
如果要使用dom4j,我们需要导入专用的jar包:dom4j-16.jar
jar包下载地址:http://www.java2s.com/Code/Jar/d/Downloaddom4j16jar.htm
导入jar之后就可以开始dom4j了

1.   dom4j查询XML:

需求1:查询XML的所有name标签的值

步骤:

(1)创建SAXReader解析器
(2)解析XML,得到Document
(3)获取根节点
(4)得到p1元素
(5)得到p1元素下的name元素
(6)获取name元素的值
 
代码:


package dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class Test1 {
    public static void main(String[] args) throws DocumentException {
        // 创建解析器
        SAXReader saxReader = new SAXReader();
        // 得到Document
        Document document = saxReader.read("source" + File.separator + "person.xml");
        // 获取根节点
        Element element = document.getRootElement();
        // 得到p1
        List<Element> list = element.elements("p1");
        // 得到p1下面的name
        for (Element element1:list) {
            Element name = element1.element("name");
            // 获取name中的值
            System.out.println(name.getText());
        }
    }
}

需求2:得到第一个name标签中的值
步骤:
(1)创建解析器
(2)得到Document
(3)得到根节点
(4)得到第一个p1元素
(5)得到p1下面的name
(6)得到name元素中的值
 
代码:


package dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
public class Test2 {
    public static void main(String[] args) throws DocumentException {
        // 创建解析器
        SAXReader saxReader = new SAXReader();
        // 得到Document
        Document document = saxReader.read("source" + File.separator + "person.xml");
        // 得到根节点
        Element element = document.getRootElement();
        // 得到第一个p1元素
        Element p1 = element.element("p1");
        // 得到name元素
        Element name = p1.element("name");
        // 输出name元素的值
        System.out.println(name.getText());
    }
}

需求3:得到第二个name标签中的值

步骤:

(1)创建解析器
(2)得到Document
(3)得到根节点
(4)得到所有的p1元素,保存在List中
(5)获取第二个list元素
(6)获取name中的值
代码:


package dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.List;
public class Test3 {
    public static void main(String[] args) throws DocumentException {
        // 创建解析器
        SAXReader saxReader = new SAXReader();
        // 得到Document
        Document document = saxReader.read("source" + File.separator + "person.xml");
        // 得到根节点
        Element element = document.getRootElement();
        // 得到所有的p1元素
        List<Element> elements = element.elements();
        // 得到第二个p1
        Element p = elements.get(1);
        // 得到第二个p1下的name
        Element name = p.element("name");
        // 获取name中的值
        System.out.println(name.getText());
    }
}

 


 

2.   dom4j末尾添加:

需求:在第一个p1标签的末尾添加<sex>man<sex>元素

步骤:

(1)创建解析器
(2)得到Document
(3)得到根节点
(4)获取第一个p1
(5)在p1后面添加新元素,返回值就是Element类型的元素
(6)设置新元素的文本值
(8)回写到xml文件
代码:


package dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class Test4 {
    public static void main(String[] args) throws DocumentException, IOException {
        // 创建解析器
        SAXReader saxReader = new SAXReader();
        // 得到Document
        Document document = saxReader.read("source" + File.separator + "person.xml");
        // 得到根节点
        Element rootElement = document.getRootElement();
        // 得到第一个p1元素
        Element element = rootElement.element("p1");
        // 直接添加sex标签
        Element sex = element.addElement("sex");
        // 设置新标签的文本值
        sex.setText("man");
        // 写回xml
        // 创建输出格式,输出漂亮的文本格式
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("source" + File.separator + "person.xml"), format);
        xmlWriter.write(document);
        // 输出流关闭
        xmlWriter.close();
    }
}

 


3.   dom4j特定位置添加:

需求:在第一个p1的<age>标签之前添加一个<dormRoom>标签

步骤:

(1)创建解析器
(2)得到Document
(3)得到第一个根节点
(4)获取第一个p1节点
(5)获取p1下面的所有元素,返回List列表
(6)问题转换为在List特定位置添加元素
(7)回写XML
代码:


package dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.*;
import java.util.List;
public class Test5 {
    public static void main(String[] args) throws DocumentException, IOException {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("source" + File.separator + "person.xml");
        Element rootElement = document.getRootElement();
        // 获取第一个p1元素
        Element p1 = rootElement.element("p1");
        // 获取第一个p1下的所有元素
        List<Element> elements = p1.elements();
        // 创建元素
        Element dormRoom = DocumentHelper.createElement("dormRoom");
        // 设置文本
        dormRoom.setText("126");
        elements.add(1, dormRoom);
        // 设置输出格式,漂亮排版的那种
        OutputFormat outputFormat = OutputFormat.createPrettyPrint();
        // 回写XML
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("source" + File.separator + "person.xml"), outputFormat);
        xmlWriter.write(document);
        xmlWriter.close();
    }
}

 

4.   dom4j修改操作:

需求:修改第一个p1的age为30
代码:



package dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.*;
public class Test6 {
    public static void main(String[] args) throws DocumentException, IOException {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("source" + File.separator + "person.xml");
        Element rootElement = document.getRootElement();
        // 得到第一个p1
        Element p1 = rootElement.element("p1");
        // 得到age元素
        Element age = p1.element("age");
        // 修改age为30
        age.setText("30");
        // 回写XML
        OutputFormat outputFormat = OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("source" + File.separator + "person.xml"), outputFormat);
        xmlWriter.write(document);
        xmlWriter.close();
    }
}

 


 

5.   dom4j删除操作:

需求:删除第一个p1标签下的<dormRoom>标签
代码:


package dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.*;
public class Test7 {
    public static void main(String[] args) throws DocumentException, IOException {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("source" + File.separator + "person.xml");
        Element rootElement = document.getRootElement();
        // 得到第一个p1
        Element p1 = rootElement.element("p1");
        // 得到dormRoom元素
        Element dormRoom = p1.element("dormRoom");
        // 直接删除dormRoom元素
        p1.remove(dormRoom);
        // 回写XML
        OutputFormat outputFormat = OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("source" + File.separator + "person.xml"), outputFormat);
        xmlWriter.write(document);
        xmlWriter.close();
    }
}

注意:与jaxp不同的是,dom4j可以直接在节点下增加和删除元素
 


 

6.   dom4j获取属性值:

需求:获取第一个p1里面属性id的值
代码:


package dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.*;
public class Test8 {
    public static void main(String[] args) throws DocumentException, IOException {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("source" + File.separator + "person.xml");
        Element rootElement = document.getRootElement();
        // 得到第一个p1
        Element p1 = rootElement.element("p1");
        // 得到p1的属性值
        String id = p1.attributeValue("id");
        System.out.println(id);
        // 回写XML
        OutputFormat outputFormat = OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("source" + File.separator + "person.xml"), outputFormat);
        xmlWriter.write(document);
        xmlWriter.close();
    }
}

 
 

您必须 登录 才能发表评论