使用dom4j解析xml文档

先要导入包,

使用dom4j解析xml文档

 导入以后,新建一个xml文档,写入以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app SYSTEM "web-app_2_3.dtd">
<web-app version="1.0">
    <servlet>
        <servlet-name>1</servlet-name>
        <servlet-class>xxx</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>1</servlet-name>
        <url-pattern>22</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file></welcome-file>
    </welcome-file-list>
</web-app>

然后写类:

package dom4j;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

public class TestDom4j {
    @Test
    public void Testdom4j() {
        try {
            //1.获取解析器
            SAXReader sr =new SAXReader();
            //2.获取document文档对象
            Document doc= sr.read("src/dom4j/web.xml");
            //3.获取根元素
            Element rootElement = doc.getRootElement();
//            System.out.println("根元素"+rootElement.getName());//获取根元素的名称
//            System.out.println(rootElement.attributeValue("version"));//获取根元素中verion的属性值
            //4.获取根元素的下一个子元素
            List<Element> children = rootElement.elements();
            //5.遍历子元素
            for (Element element : children) {
                if("servlet".equals(element.getName())){//如果元素的名字等于servlet
                    Element servletName = element.element("servlet-name");
                    Element servletClass = element.element("servlet-class");
                    System.out.println(servletName.getText());//输出servletName的文本内容
                    System.out.println(servletClass.getText());//输出servletClass的文本内容
                    
                }
            }
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }

}

使用Junit测试之后:

使用dom4j解析xml文档

 这样就可以获取,根元素,以及子元素,各种属性值等,更多方法如下:

elements()获取指定名称的所有子元素

element()获取指定名称的首个子元素

elementText()获取指定名称元素的文本值

思考:在写的过程中,要用list来接受,并且遍历根元素的所有子元素,为了加快效率,可以使用泛型,这样在后来的遍历中,直接什么也不用输入,只需要输入循环体里面的内容,减少了很多麻烦

相关推荐