使用jdom的XPath来快速定位xml节点

在用jdom来解析xml文档的时候,我们常常需要快速定位到某一个节点进行读取或修改操作。定位节点,这正是xpath表达式发挥作用的地方。jdom-1.0(www.jdom.org有下载)支持解析xpath路径表达式,这样我们在用jdom来解析xml文档的时候,方便多了。请看例子


1.示例用xml文件,kk.xml

<?xml version = "1.0" encoding="GB2312" ?>
<联系人列表>
     <联系人>
         <姓名>张三</姓名>
         <ID>001</ID>
         <公司>A公司</公司>
         <EMAIL>zhang@aaa.com</EMAIL>
         <电话 类型="公司">(010)62345678</电话>
         <电话 类型="家庭">(010)88888888</电话>
         <地址>
             <街道>五街1234号</街道>
             <城市>北京市</城市>
             <省份>北京</省份>
         </地址>
     </联系人>

     <联系人>
         <姓名>李四</姓名>
         <ID>002</ID>
         <公司>B公司</公司>
         <EMAIL>li@bbb.org</EMAIL>
         <电话 类型="公司">(021)87654321</电话>
         <地址>
             <街道>南京路9876号</街道>
             <城市>上海</城市>
             <省份>上海</省份>
         </地址>
     </联系人>
</联系人列表>

2.为了找到张三的家庭的电话号码,使用下列代码段


import java.util.List;
import java.net.URL;
import org.jdom.*;
import org.jdom.xpath.*;
import org.jdom.input.*;
import java.io.*;
import java.util.*;


public class Test{
   public static void main(String[] args) throws Exception{

     SAXBuilder builder = new SAXBuilder();
     Document doc = builder.build("kk.xml");
     Element root = doc.getRootElement();

     XPath xpath = XPath.newInstance("//电话[../姓名='张三'][@类型='家庭']");
      List list = xpath.selectNodes(root);

      Iterator iter = list.iterator();
      while (iter.hasNext()) {
        Element item = (Element) iter.next();
        System.err.println(item.getText());
      }


   }

程序编译时,设置编译路径的jdom.bat
文件内容如下:
set CLASSPATH=
      c:\java\jar\jdom.jar;c:\java\jar\jaxen-core.jar;c:\java\jar\saxpath.jar;c:\java\jar\jaxen-jdom.jar;%CLASSPATH%

运行结果:


C:\java>java Test
(010)88888888

C:\java>


输出结果正是我们想要的:(010)88888888.怎么样,很方便吧:)。

不过呢,我这个表达式效率不一定就是最高的,你对xpath掌握得越好,查询效率越好。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值