zoukankan      html  css  js  c++  java
  • 在Dom4j中使用Xpath搜索xml的元素节点

    有关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 :[org.dom4j.tree.DefaultElement@d3c6a3 [Element: <学生 attributes: [org.dom4j.tree.DefaultAttribute@1961581 [Attribute: name 学号 value "1"]]/>]]
    学生
    姓名:张三
    性别:男
    年龄:20

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

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

    输出结果:

    list :[org.dom4j.tree.DefaultText@15f7107 [Text: "
    	"], org.dom4j.tree.DefaultElement@f593af [Element: <学生 attributes: [org.dom4j.tree.DefaultAttribute@1ee2c2c [Attribute: name 学号 value "1"]]/>], org.dom4j.tree.DefaultText@b2c6a6 [Text: "
    	"], org.dom4j.tree.DefaultElement@10ffb38 [Element: <学生 attributes: [org.dom4j.tree.DefaultAttribute@1963b3e [Attribute: name 学号 value "2"]]/>], org.dom4j.tree.DefaultText@36527f [Text: "
    	"], org.dom4j.tree.DefaultElement@6210fb [Element: <学生 attributes: [org.dom4j.tree.DefaultAttribute@b6548 [Attribute: name 学号 value "3"]]/>], org.dom4j.tree.DefaultText@48edb5 [Text: "
    "]]
    


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

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

    输出结果:

    [org.dom4j.tree.DefaultElement@6355dc [Element: <学生 attributes: [org.dom4j.tree.DefaultAttribute@1a85d38 [Attribute: name 学号 value "3"]]/>]]
    

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

  • 相关阅读:
    css实现文字相对于图片垂直居中
    node能做的性能优化
    vue.config.js中vue的配置
    react/vue项目腾讯云/阿里云服务器linux部署
    taro项目结构分析和坑
    vscode自动编译less
    css彩色字体
    微信小程序文件上传
    小程序html解析
    小程序表单
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300451.html
Copyright © 2011-2022 走看看