Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 312|回复: 0

[xml学习]使用dom4j和XPath解析XML之例子二

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-10 01:57:57 | 显示全部楼层 |阅读模式
    包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), TestDom4jReadExmple.java(测试解析的结果)

    studentInfo.xml <?xml version="1.0" encoding="gb2312"?>
    <students>
         <student age="25"><!--如果没有age属性,默认的为20-->
             <name>崔卫兵</name>
             <college>PC学院</college>
             <telephone>62354666</telephone>
             <notes>男,1982年生,硕士,现就读于北京邮电大学</notes>
         </student>
      
      
            <student>
             <name>cwb</name>
             <college leader="学院领导">PC学院</college><!--如果没有leader属性,默认的为leader-->
             <telephone>62358888</telephone>
             <notes>男,1987年生,硕士,现就读于中国农业大学</notes>
         </student>
         <student age="45">
             <name>xxxxx</name>
             <college leader="">xxx学院</college>
             <telephone>66666666</telephone>
             <notes>注视中,注释中</notes>
         </student>
         <student age="">
             <name>lxx</name>
             <college>yyyy学院</college>
             <telephone>88888888</telephone>
             <notes>注视中111,注释中222</notes>
         </student>
    </students> Dom4jReadExmple.java package dom4jExample.read; import java.io.File;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List; import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    /**
      * 利用dom4j与XPath进行XML编程
      * @author cuiweibing
      * @since 2007.8.10
      */
    public class Dom4jReadExmple {
      /**
       * 利用XPath操作XML文件,获取指定节点或者属性的值,并放入HashMap中
       * @param filename String 待操作的XML文件(相对路径或者绝对路径)
       * @param hm       HashMap 存放选择的结果,格式:<nodename,nodevalue>或者<nodename+attrname,attrvalue>
       */
      public void getSelectedNodeValue(String filename,HashMap<String,String> hm){
       try {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(new File(filename));
        //获取学生姓名为"崔卫兵"的年龄
        List list = document.selectNodes("/students/student[name="崔卫兵"]/@age");
        Iterator iter = list.iterator();
        if (iter.hasNext()) {
         Attribute attribute = (Attribute) iter.next();
         hm.put("崔卫兵-"+attribute.getName(), attribute.getValue());
        }else{
         hm.put("崔卫兵-age", "20");
        }

        //获取学生姓名为"崔卫兵"的年龄
        list = document.selectNodes("/students/student[name="cwb"]/@age");
        iter = list.iterator();
        if (iter.hasNext()) {
         Attribute attribute = (Attribute) iter.next();
         hm.put("cwb-"+attribute.getName(), attribute.getValue());
        }else{
         hm.put("cwb-age", "20");
        }

           //获取学生姓名为"cwb"所在的学院名称
        list = document.selectNodes("/students/student[name="cwb"]/college");
        iter = list.iterator();
        if (iter.hasNext()) {
          Element element = (Element) iter.next();
          String name = element.getName();
          String value = element.getText();
          hm.put("cwb-"+name, value);
        }

        //获取学生姓名为"cwb"所在学院的领导
        list = document.selectNodes("/students/student[name="cwb"]/college/@leader");
        iter = list.iterator();
        if (iter.hasNext()) {
         Attribute attribute = (Attribute) iter.next();
         hm.put("cwb-college-"+attribute.getName(), attribute.getValue());
        }else{
         hm.put("cwb-college-leader", "leader");
        }

        //获取学生姓名为"lxx"所在的学院名称
        list = document.selectNodes("/students/student[name="lxx"]/college");
        iter = list.iterator();
        if (iter.hasNext()) {
          Element element = (Element) iter.next();
          String name = element.getName();
          String value = element.getText();
          hm.put("lxx-"+name, value);
        }

        //获取学生姓名为"lxx"所在学院的领导
        list = document.selectNodes("/students/student[name="lxx"]/college/@leader");
        iter = list.iterator();
        if (iter.hasNext()) {
         Attribute attribute = (Attribute) iter.next();
         hm.put("lxx-college-"+attribute.getName(), attribute.getValue());
        }else{
         hm.put("lxx-college-leader", "leader");
        }
       } catch (Exception ex) {
        ex.printStackTrace();
       }
      }
    }

    TestDom4jReadExmple.java package dom4jExample.read; import java.util.HashMap; /**
      * 测试Dom4jReadExmple解析的情况
      * @author cuiweibing
      * @since 2007.8.10
      */
    public class TestDom4jReadExmple {
      public static void main(String[] args) {
          try{
            //获取解析完后的解析信息
            HashMap<String,String> hashMap;
            Dom4jReadExmple drb=new Dom4jReadExmple();
            //利用XPath操作XML文件,获取想要的属性值
            hashMap = new HashMap<String,String>();
            drb.getSelectedNodeValue("studentInfo.xml", hashMap);
            System.out.println("崔卫兵-age:"+hashMap.get("崔卫兵-age"));
            System.out.println("cwb-age:"+hashMap.get("cwb-age"));
            System.out.println("cwb-college:"+hashMap.get("cwb-college"));
            System.out.println("cwb-college-leader:"+hashMap.get("cwb-college-leader"));
            System.out.println("lxx-college:"+hashMap.get("lxx-college"));
            System.out.println("lxx-college-leader:"+hashMap.get("lxx-college-leader"));
          }catch(Exception ex){
            ex.printStackTrace();
          }
        }
    }

    运行结果 崔卫兵-age:25
    cwb-age:20
    cwb-college:PC学院
    cwb-college-leader:学院领导
    lxx-college:yyyy学院
    lxx-college-leader:leader
      
       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/10/10/010124765.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 18:16 , Processed in 0.380974 second(s), 36 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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