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

dom4j解析xml

包括三个文件: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 org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
 * 利用dom4j进行XML编程
 * @author cuiweibing
 * @since 2007.8.10
 */
public class Dom4jReadExmple {
 /**
  * 遍历整个XML文件,获取所有节点的值与其属性的值,并放入HashMap中
  * @param filename String 待遍历的XML文件(相对路径或者绝对路径)
  * @param hm       HashMap 存放遍历结果,格式:<nodename,nodevalue>或者<nodename+attrname,attrvalue>
  */
 public void iterateWholeXML(String filename,HashMap<String,String> hm){
  SAXReader saxReader = new SAXReader();
  try {
   Document document = saxReader.read(new File(filename));
   Element root = document.getRootElement();
//   用于记录学生编号的变量
   int num=-1;
   //遍历根结点(students)的所有孩子节点(肯定是student节点)
         for ( Iterator iter = root.elementIterator(); iter.hasNext(); ) {
             Element element = (Element) iter.next();
             num++;
    // 获取person节点的age属性的值
             Attribute ageAttr=element.attribute("age");
    if(ageAttr!=null){
     String age = ageAttr.getValue();
     if (age != null&&!age.equals("")) {
      hm.put(element.getName() + "-"+ageAttr.getName()+ num, age);
     } else {
      hm.put(element.getName() + "-" +ageAttr.getName()+ num, "20");
     }
    }else{
     hm.put(element.getName() + "-age"+ num, "20");
    }
             //遍历student结点的所有孩子节点(即name,college,telphone,notes),并进行处理
             for ( Iterator iterInner = element.elementIterator(); iterInner.hasNext(); ) {
              Element elementInner = (Element) iterInner.next();
              if(elementInner.getName().equals("college")){
               hm.put(elementInner.getName()+ num, elementInner.getText());
               //获取college节点的leader属性的值
               Attribute leaderAttr=elementInner.attribute("leader");
               if(leaderAttr!=null){
       String leader = leaderAttr.getValue();
       if (leader != null&&!leader.equals("")) {
        hm.put(elementInner.getName() + "-"+leaderAttr.getName()+ num, leader);
       } else {
        hm.put(elementInner.getName() + "-" +leaderAttr.getName()+ num, "leader");
       }
               }else {
       hm.put(elementInner.getName() + "-leader"+ num, "leader");
      }
              }else{
               hm.put(elementInner.getName()+ num, elementInner.getText());
              }
             }
         }

  } catch (DocumentException e) {
   // TODO Auto-generated catch block
   e.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();
       //遍历整个XML文件
       hashMap = new HashMap<String,String>();
       drb.iterateWholeXML("studentInfo.xml", hashMap);
       System.out.println("姓名/t年龄/t学院/t学院领导/t电话/t/t备注");
       for(int i=0;i<hashMap.size();i+=6){
         int j=i/6;
         System.out.print(hashMap.get("name"+j)+"/t");
         System.out.print(hashMap.get("student-age"+j)+"/t");
         System.out.print(hashMap.get("college"+j)+"/t");
         System.out.print(hashMap.get("college-leader"+j)+"/t");
         System.out.print(hashMap.get("telephone"+j)+"/t");
         System.out.println(hashMap.get("notes"+j)+"/t");
       }
     }catch(Exception ex){
       ex.printStackTrace();
     }
   }
}

运行结果

姓名 年龄 学院 学院领导 电话  备注
崔卫兵 25 PC学院 leader 62354666 男,1982年生,硕士,现就读于北京邮电大学 
cwb 20 PC学院 学院领导 62358888 男,1987年生,硕士,现就读于中国农业大学 
xxxxx 45 xxx学院 leader 66666666 注视中,注释中 
lxx 20 yyyy学院 leader 88888888 注视中111,注释中22

转载于:https://www.cnblogs.com/javawebstudy/archive/2013/03/27/2985042.html

相关文章:

  • sublime text less安装踩坑图文讲解(less无法生成css)
  • PHP中遍历关联数组的方法
  • opencv再学习之路(五)---灰度直方图显示
  • 在windows2003上部署MVC4.0需要具备的环境
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • ContentProvider介绍
  • 10.19 iptables规则备份和恢复10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作...
  • C# 屏幕监控 自动截屏程序 主窗体隐藏,仅在进程中显示
  • 手机加载优化 - 2x、3x图
  • 清明小感
  • [win7-oracle处理方法]--java.lang.Exception: Exception in sending Request :: null(转)
  • 0323-方法(函数)
  • 把每天当成人生第一天来过,把每一天当成人生最后一天来过
  • 第六届蓝桥杯java b组第五题
  • 在指定宽度和高度范围内最大化缩放图片
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Android优雅地处理按钮重复点击
  • Asm.js的简单介绍
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • Git的一些常用操作
  • IDEA常用插件整理
  • Java IO学习笔记一
  • JavaScript设计模式与开发实践系列之策略模式
  • JavaScript中的对象个人分享
  • Java知识点总结(JavaIO-打印流)
  • JS基础之数据类型、对象、原型、原型链、继承
  • Laravel核心解读--Facades
  • MYSQL 的 IF 函数
  • Python socket服务器端、客户端传送信息
  • Python学习之路13-记分
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 半理解系列--Promise的进化史
  • 回顾 Swift 多平台移植进度 #2
  • 每天一个设计模式之命令模式
  • 十年未变!安全,谁之责?(下)
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (二)WCF的Binding模型
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .net2005怎么读string形的xml,不是xml文件。
  • .net6使用Sejil可视化日志
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net解析传过来的xml_DOM4J解析XML文件
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET企业级应用架构设计系列之开场白
  • .Net中的设计模式——Factory Method模式
  • @RequestMapping用法详解
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • @WebService和@WebMethod注解的用法