xml解析-dom4j对XPATH的支持

用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用起来非常方便,这里只做简单介绍,更详细的内容请参考其它博文。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值