xml解析-dom4j对XPATH的支持

来源:互联网 发布:南浔住宿推荐 知乎 编辑:程序博客网 时间:2024/06/10 08:52

用dom4j对xml进行解析已经比sax方式简洁了很多,用起来很方便,但是在获取某个元素时依然有点麻烦,要一层一层的获取,这样很麻烦,换好dom4j提供了对XPATH的支持,这里简单介绍一下。
以下面这个xml文件为例:

<?xml version="1.0" encoding="UTF-8"?><person>   <p1 id="111">     <name>zhangsan</name>      <age>40</age>      <sex>nv</sex>   </p1>    <p1 id="222">     <name>lisi</name>      <age>21</age>   </p1>    <p1 id="333">     <name>wangwu</name>      <age>20</age>   </p1> </person>

比如我现在想获取p1属性id值为222的元素下面的name元素,如果用dom4j,首先要获取根节点person,然后获取根节点下面的第二个p1元素,最后获取p1下面的name元素,这样操作起来很繁琐,如果xml文件很复杂,这样操作就会相当复杂。如果用XPATH将会很方便,代码如下:

public static void getFirstName() throws Exception{        Document doc = Dom4jUtils.getDocument();        Node name1 = doc.selectSingleNode("//p1[@id='111']/name");        System.out.println("name="+name1.getText());    }

代码中获取document对象的代码我封装在了一个类中,这里不再给出,重点是看获取元素部分代码。大家会发现在获取元素时只调用了一个方法,方法里有一个特殊的字符串,下面给出六种最常用的形式:

/AAA/DDD/BBB 表示AAA下面的DDD下面的BBB元素 //BBB 表示得到所有的BBB元素 /* 表示得到所有元素 BBB[1],BBB[last()] 分别表示第一个BBB元素和最后一个BBB元素 //BBB[@id] 表示得到所有有id属性的BBB元素 //BBB[@id=’aaa’] 表示得到属性值是aaa的BBB元素

下面再给出一个例子:
得到所有的name元素

public static void getAllName() throws Exception{        Document doc = Dom4jUtils.getDocument();        List<Node> names = doc.selectNodes("//name");        for(Node name:names) {            String s = name.getText();            System.out.println("name="+s);        }    }

xpath用起来非常方便,这里只做简单介绍,更详细的内容请参考其它博文。

1 0
原创粉丝点击