首页 > 技术文章 > JDom结合XPath查找一列(转)

ganymede 2014-07-10 14:45 原文

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

  --------------------

推荐阅读