知道美河 | 上传资料 | VIP申请 | 精品课程 | 资料搜索 | 问题反馈 | 会员手册 | 积分消费 | 积分充值 | 帐号保护
美河学习学习在线赞助VIP

美河学习在线(主站) eimhe.com

 找回密码
 建立账号
查看: 5293|回复: 0

[转帖] JDom结合XPath查找一列

[复制链接]
发表于 2007-8-10 09:58:18 | 显示全部楼层 |阅读模式
XML使用XPath的查询,就像我们平常操作数据库一样,根据某一关键字,然后取出关键字所对应的记录,然后再取出其对应的属性值。

import java.io.FileInputStream;
import java.util.List;
import org.jdom.xpath.*;
import org.jdom.input.SAXBuilder;
import org.jdom.*;

/**
* 使用JDOM操作XML文件示例--利用XPath进行查找操作
* 步骤:
* 1、去www.jdom.org下载jdom 1.0,也只有这个版本,因为作为觉得简单的才是最好的,除非XML更改才会对程序更行更改
* 2、准备XML文件,将放在指定的目录下:
* <?xml version="1.0" encoding="UTF-8" ?>
    <student>
    <user id='1'>
       <name>test_boy</name>
        <age>23</age>
        <sex>boy</sex>
    </user>
    <user id='2'>
        <name>test_girl</name>
        <age>20</age>
        <sex>girl</sex>
    </user>
    </student>
* 3、将代码放进去,直接运行并查看结果,就OK了
*/

public class JDomSearchTest
{
  String xmlPath = "test2.xml";//原文件,必须存在
  SAXBuilder builder=new SAXBuilder();
  Document document;
  public JDomSearchTest()
  {
    try
    {
      document=builder.build(new FileInputStream(xmlPath));
    }
    catch (Exception e)
    {
       e.printStackTrace();
    }  
  }
  
  public static void main(String[] args)
  {   
    JDomSearchTest j=new JDomSearchTest();
    Element root=j.document.getRootElement();
    List list=null;
    try
    {
      //下面进行从得到的root下面的/student/user开始查找
      //此的/student/user就相当于我们常见的目录地址一样
      //因为XML的组织形式本来就是树形的
      list = XPath.selectNodes(root,"/student/user");
    }
    catch (JDOMException e)
    {
      e.printStackTrace();
    }
    for(int i=0;i<list.size();i++)
    {
      Element e=(Element)list.get(i);
      //取得属性
      String id=e.getAttributeValue("id");
      try
      {
        //利用属性进行查寻
        //得到对应id下面的name的值
        String name = ((Text)XPath.selectSingleNode(e,"//user[@id="+id+"]/name/text()")).getTextNormalize();
        //得到对应id下面的age的值
        String age=((Text)XPath.selectSingleNode(e,"//user[@id="+id+"]/age/text()")).getTextNormalize();
        //得到对应id下面的sex的值
        String sex=((Text)XPath.selectSingleNode(e,"//user[@id="+id+"]/sex/text()")).getTextNormalize();
        System.out.println("name:"+name);
        System.out.println("sex:"+sex);
        System.out.println("age:"+age);
        System.out.println("--------------------");
      }
      catch (JDOMException f)
      {
        f.printStackTrace();
      }
    }
  }
}
  

运行结果:


C:\test>java JDomSearchTest
name:test_boy
sex:boy
age:23
--------------------
name:test_girl
sex:girl
age:20
--------------------
您需要登录后才可以回帖 登录 | 建立账号

本版积分规则

 
QQ在线咨询

QQ|小黑屋|手机版|Archiver|美河学习在线 ( 浙网备33020302000026号 )

GMT+8, 2025-5-4 14:04

Powered by Discuz!

© 2001-2025 eimhe.com.

快速回复 返回顶部 返回列表