当前位置: 首页 > news >正文

使用dom4j和XPath解析XML之例子二

 

包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), TestDom4jReadExmple.java(测试解析的结果) (由于使用csdn blog自带的代码粘贴工具会朝里加入一些"..."字符,虽然利于查看,但是不利于把代码copy出来运行,而亲自运行代码对程序员来说是很重要的,故没有使用csdn blog自带的代码粘贴工具来插入代码,而是用着用直白的方式):

 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

相关文章:

  • [改善Java代码]子列表只是原列表的一个视图
  • 使用Java自带SAX工具解析XML
  • 使用SAX解析XML (控制台程序)
  • PMI列子1
  • 一个简单实用的AJAX例子
  • VS使用技巧
  • 一个最简单的AJAX实例及解析
  • 静态库中有图片,改如何存放呢??
  • 用Java结合SAX 2.0 解析XML文档
  • HDU 2594 Simpsons’ Hidden Talents(辛普森一家的潜在天赋)
  • 在Dom4j中使用xpath
  • C# 文件与目录的基本操作(System.IO)
  • 在JavaScript中使用Java
  • Postgresql 同步流复制
  • ??在JSP中,java和JavaScript如何交互?
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • css选择器
  • ECMAScript6(0):ES6简明参考手册
  • es的写入过程
  • JavaScript实现分页效果
  • Java深入 - 深入理解Java集合
  • java中具有继承关系的类及其对象初始化顺序
  • JS函数式编程 数组部分风格 ES6版
  • Netty 4.1 源代码学习:线程模型
  • Redux系列x:源码分析
  • scrapy学习之路4(itemloder的使用)
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 简单数学运算程序(不定期更新)
  • 三栏布局总结
  • 设计模式 开闭原则
  • 王永庆:技术创新改变教育未来
  • 无服务器化是企业 IT 架构的未来吗?
  • 回归生活:清理微信公众号
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #### go map 底层结构 ####
  • (02)Hive SQL编译成MapReduce任务的过程
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (九)信息融合方式简介
  • (四)图像的%2线性拉伸
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)编辑寄语:因为爱心,所以美丽
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core 中插件式开发实现
  • .NET Core中Emit的使用
  • .Net MVC + EF搭建学生管理系统
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • /bin/rm: 参数列表过长"的解决办法
  • @selector(..)警告提示
  • []使用 Tortoise SVN 创建 Externals 外部引用目录