dom4j解析xml API

1 使用dom4j解析xml
*dom4j是一个组织,针对xml解析,提供解析器dom4j
*dom4j不是javase的一部分,需要导入dom4j的jar包

*得到document
SAXReader reader = new SAXReader();
Document document=reader.read(url);
*document的父接口是Node
如果在document里面找不到想要的方法,到Node中找
*document里面的方法 getRootElement():获取根节点 返回的是Element
*Element也是一个接口,父接口是Node

2 使用dom4j查询xml
查询person.xml中所有name元素的值

package cn.jaxptest;

import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class TestDom4j {

    public static void main(String[] args) throws Exception {
        selectName();

    }

    private static void selectName() throws Exception {
        /*
         * 1 创建解析器 
         * 2 得到document
         * 3 得到根节点 
         * 4 得到P1
         * 5 得到p1下面的name 
         * 6 得到name里的值
         */
        SAXReader saxReader = new SAXReader();
        org.dom4j.Document document = saxReader.read("src/person.xml");
        Element root = document.getRootElement();
        java.util.List<Element> list = root.elements("p1");
        for (Element element : list) {
            Element name1 = element.element("name");
            String s = name1.getText();
            System.out.println(s);
        }

    }
}

 3 dom4j支持XPATH的操作

3.1 XPATH的形式
*可以直接获取某个元素
第一种形式 /表示一层
/AAA/DDD/BBB AAA下面的DDD下面的BBB
第二种形式 // 表示和名称相同
//BBB 所有名称为BBB的元素
第三种形式 /* 表示所有的元素
第四种形式[n] 表示第n个
/BBB[1] 第一个名称为BBB元素
第五种形式
//BBB[@id] 只要所有id属性的BBB
//BBB[@id='b1'] BBB上有id属性且属性值为b1
...
3.2 dom4j使用XPATH的API
*默认情况下,dom4j不支持xpath
*需要将jaxen-1.1-beta-6.jar导入到项目中
*在dom4j提供了两个方法,用来支持xpath
selectNodes("xpath表达式"):获取多个节点
selectSingleNode("xpath表达式"):获取一个节点
*使用xpath实现:查询xml中所有name元素的值
所有name元素的xpath表示://name
使用selectNodes("//name"):

package cn.jaxptest;

import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class TestDom4j {

    public static void main(String[] args) throws Exception {
        test1();

    }

    private static void test1() throws Exception {
        /*
         * 1 创建解析器 
         * 2 得到document 
         * 3 直接使用selectNodes("//name")        
         */
        SAXReader saxReader = new SAXReader();
        org.dom4j.Document document = saxReader.read("src/person.xml");
        java.util.List<Node> list = document.selectNodes("//name");
        // 得到所有name元素的值
        for (Node node : list) {
            String string = node.getText();
            System.out.println(string);

        }
        // 获取第一个p1下面的name元素值
        Node node = document.selectSingleNode("//p1[1]/name");
        String s = node.getText();
        System.out.println(s);
    }

}

 

posted @ 2018-05-30 17:43  ZECDLLG  阅读(252)  评论(0编辑  收藏  举报