博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用dom4j解析XML例子
阅读量:6501 次
发布时间:2019-06-24

本文共 4373 字,大约阅读时间需要 14 分钟。

包括三个文件:studentInfo.xml(待解析的xml文件), Dom4jReadExmple.java(解析的主要类), TestDom4jReadExmple.java(测试解析的结果)

代码运行前需先导入dom4j架包。

 

studentInfo.xml文件(该文件放在本项目目录下)内容如下:

崔卫兵
PC学院
62354666
男,1982年生,硕士,现就读于北京邮电大学
cwb
PC学院
62358888
男,1987年生,硕士,现就读于中国农业大学
xxxxx
xxx学院
66666666
注视中,注释中
lxx
yyyy学院
88888888
注视中111,注释中222

 

Dom4jReadExmple.java类代码如下:

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 henuyuxiang * @since 2014.7.11 */public class Dom4jReadExmple {	/**	 * 遍历整个XML文件,获取所有节点的值与其属性的值,并放入HashMap中	 * 	 * @param filename	 *            String 待遍历的XML文件(相对路径或者绝对路径)	 * @param hm	 *            HashMap	 *            存放遍历结果,格式:
或者
*/ public void iterateWholeXML(String filename, HashMap
hm) { SAXReader saxReader = new SAXReader(); try { Document document = saxReader.read(new File(filename)); Element root = document.getRootElement(); // 用于记录学生编号的变量 int num = -1; // 遍历根结点(students)的所有孩子节点(肯定是student节点) for (@SuppressWarnings("rawtypes") 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 (@SuppressWarnings("rawtypes") 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 demo1;import java.util.HashMap;/** * 测试Dom4jReadExmple解析的情况 *  * @author henuyuxiang * @since 2014.7.11 */public class TestDom4jReadExmple {	public static void main(String[] args) {		try {			// 获取解析完后的解析信息			HashMap
hashMap; Dom4jReadExmple drb = new Dom4jReadExmple(); // 遍历整个XML文件 hashMap = new HashMap
(); drb.iterateWholeXML("studentInfo.xml", hashMap); System.out.println("姓名\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(); } }}

 

 

运行结果如下图所示:

 

转载地址:http://muvyo.baihongyu.com/

你可能感兴趣的文章
R 学习笔记《十》 R语言初学者指南--图形工具
查看>>
PHP通过读取DOM抓取信息
查看>>
DICOM医学图像处理:DICOM网络传输
查看>>
nio和传统Io的区别
查看>>
移动端网页布局中需要注意事项以及解决方法总结
查看>>
(原创)Linux下查看系统版本号信息的方法
查看>>
oracle
查看>>
redis使用过程中主机内核层面的一些优化
查看>>
我也要谈谈大型网站架构之系列(2)——纵观历史演变(下)
查看>>
大话设计模式(Golang) 二、策略模式
查看>>
使用PostgreSQL 9.6 架设mediawiki服务器
查看>>
数据库服务器硬件对性能的影响
查看>>
LVM
查看>>
windows+群辉服务器环境下,搭建git版本管理
查看>>
Boolean类型
查看>>
Ubuntu 修改源
查看>>
php 几个比较实用的函数
查看>>
(译)OpenGL ES2.0 – Iphone开发指引
查看>>
@RestController 与 @RequestMapping
查看>>
黑马程序员.bobo.DAY.1
查看>>