欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在Dom4j中使用Xpath搜索xml的元素节点

程序员文章站 2022-05-28 21:02:27
...

有关XPath的知识,大家可以参考我的xml小结里面的《通过Xpath查找指定节点》一文,在本文中我们继续使用test,xml来作为解析的范例!为了方便起见,我就直接把源码附在下面了!

<?xml version="1.0" encoding="utf-8"?>
<学生名册  >
	<学生 学号="1">
		<姓名>张三</姓名>
		<性别>男</性别>
		<年龄>20</年龄>
	</学生>
	<学生 学号="2">
		<姓名>李四</姓名>
		<性别>女</性别>
		<年龄>19</年龄>
	</学生>
	<学生 学号="3" >
		<姓名>王五</姓名>
		<性别>男</性别>
		<年龄>21</年龄>
	</学生>
</学生名册>

和上次一样,来读取xml,获取它的Document对象。

	  SAXReader saxReader=new SAXReader();
	  Document document=saxReader.read(new File("test.xml"));
	  Element root=document.getRootElement();
	  System.out.println(root.getName());

实例:选取学生名册下子元素为学生,且该子元素属性是学号=1的节点,然后我们获取该子元素节点下面的元素.

List list =document.selectNodes("/学生名册/学生[@学号='1']");	 
      System.out.println("list :"+list);
      
      for(Iterator iterator=list.iterator();iterator.hasNext();){
    	    Element e=(Element)iterator.next();
    	    System.out.println(e.getName());
    	    
    	    for (Iterator it=e.elementIterator();it.hasNext();){ 	
    	          Element subElement=(Element)it.next();
    	           System.out.println(subElement.getName()+":"+subElement.getText()); 	         
    	    }
      }

输出结果:

学生名册
list :[[email protected] [Element: <学生 attributes: [[email protected] [Attribute: name 学号 value "1"]]/>]]
学生
姓名:张三
性别:男
年龄:20

对于xpath中的node(),它可以匹配任何类型的节点,使用它时会一并获得我们test.xml中的空白节点,不过它似乎只可以获得该元素下的子元素节点,子元素下的子元素就不会再去访问了,呵呵,说的有点饶人,语文不好。例如:

      List list =root.selectNodes("node()");	 
      System.out.println("list :"+list);

输出结果:

list :[[email protected] [Text: "
	"], [email protected] [Element: <学生 attributes: [[email protected] [Attribute: name 学号 value "1"]]/>], [email protected] [Text: "
	"], [email protected] [Element: <学生 attributes: [[email protected] [Attribute: name 学号 value "2"]]/>], [email protected] [Text: "
	"], [email protected] [Element: <学生 attributes: [[email protected] [Attribute: name 学号 value "3"]]/>], [email protected] [Text: "
"]]


前面的例子我们都是一步一步,从上往下搜索的,其实利用Xpath,我们可以搜索任意的元素节点,不必考虑它在xml中的位置,这就是我们常说的绝对路径运算符"//",

      //获取学生下子元素为姓名且值为王五的元素
      List e= root.selectNodes("//学生[姓名='王五']"); 
      System.out.println(e);

输出结果:

[[email protected] [Element: <学生 attributes: [[email protected] [Attribute: name 学号 value "3"]]/>]]

结果输出有点难看,没有细致处理,但很直观,感兴趣的童鞋们可以自己处理下!掌握这些知识,相信可以处理简单的xml文档解析了!

转载于:https://www.cnblogs.com/*da/archive/2013/05/23/6300451.html