JDom结合XPath的查找一列

来源:互联网 发布:apache 配置post请求 编辑:程序博客网 时间:2024/05/28 23:12
XML使用XPath的查询,就像我们平常操作数据库一样,根据某一关键字,然后取出关键字所对应的记录,然后再取出其对应的属性值。
如果想更详细了解JDom中XPath的使用,请参阅文章:
http://blog.csdn.net/fenglibing/archive/2007/07/01/1674201.aspx

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 = "e://Mickey//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();
      }
    }
  }
}
 
原创粉丝点击