当前位置: 首页 > 编程日记 > 正文

使用dom4j解析XML例子

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

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

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类代码如下:

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*            存放遍历结果,格式:<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 (@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 blocke.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<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备注");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();}}
}

运行结果如下图所示:

相关文章:

mkdir、rmdir命令、head、tail命令

mkdir-p 递归创建目录11里面都是空目录rmdir删除空目录 -p 当子目录被删除后使它也成为空目录的话&#xff0c;则一并删除步骤&#xff1a;先删除11/22/33 发现22目录空了&#xff0c;因为33删了&#xff0c;于是再删22&#xff0c;空了再删11head默认是前10行 –n指定几行tai…

Linux Find 命令精通指南

作者&#xff1a;Sheryl Calish Linux find 命令是所有 Linux 命令中最有用的一个&#xff0c;同时也是最混乱的一个。它很难&#xff0c;因为它的语法与其他 Linux 命令的标准语法不同。但是&#xff0c;它很强大&#xff0c;因为它允许您按文件名、文件类型、用户甚至是时间戳…

【安全运维】 linux 系统账户,网络,简易安全加固方案(第一部分),经测试可行...

前言讲到linux系统账户的管理以及安全&#xff0c;就必须涉及 /etc/passwd /etc/shadow 这2个文件这里以截图中文字说明的方式&#xff0c;来分析这2个文件的内容&#xff0c;并且给出一些实用的安全加固方案注意&#xff0c;本文会持续更新&#xff0c;后续加入的内容都以直…

不用深度学习,怎么提取图像特征?

来源 | 小白学视觉头图 | 下载于ICphoto图像分类是数据科学中最热门的领域之一&#xff0c;在本文中&#xff0c;我们将分享一些将图像转换为特征向量的技术&#xff0c;可以在每个分类模型中使用。VATboxVATbox&#xff0c;作为n一个我们所暗示的&#xff0c;涉及增值税问题&a…

课程第五天内容《基础交换 五》

2019独角兽企业重金招聘Python工程师标准>>> 以太网/LAN(local area network )的相关概念&#xff1a; 问题&#xff1a; 信号传输距离有限&#xff1b; 解决方案&#xff1a; 中继器 - 放大电信号&#xff0c;延长信息的传输距离&#xff1…

C#综合揭秘——Entity Framework 并发处理详解

引言 在软件开发过程中&#xff0c;并发控制是确保及时纠正由并发操作导致的错误的一种机制。从 ADO.NET 到 LINQ to SQL 再到如今的 ADO.NET Entity Framework&#xff0c;.NET 都为并发控制提供好良好的支持方案。 并发处理方式一般分为乐观必并发与悲观必并发两种&#xff0…

@2021高考生,用 Python 分析专业“钱景”

来源 | 关于数据分析于可视化头图 | 下载于ICphoto2021年的高考在昨日拉开帷幕&#xff0c;十年的寒窗苦读&#xff0c;终于到了最后见分晓的时候了。在这么一场关键的考试当中&#xff0c;除了考试前努力奋斗&#xff0c;考场上认真答题&#xff0c;考后的志愿填报也是极其的重…

Linux下C语言的fgets与fputs

使用的是 CentOS gcc编译下面程序 显示warning: the gets function is dangerous and should not be used.问题出在程序中使用了 gets Linux 下gcc编译器不支持这个函数&#xff0c;解决办法是使用 fgets fgets()函数的基本用法为&#xff1a; fgets(char * s,int size,FILE * …

linux发行版的用户交互

1 cli&#xff0c;即command line interface 纯命令行的交互方式&#xff0c;该命令行界面是由shell提供的。 linux内核本身也自带了一个console&#xff0c;即linux console&#xff0c;它是基于frame buffer的。 cli的界面都是基于ncurses库开发的。 2 GUI&#xff0c;graphi…

C#中在应用程序和DLL使用消息

在C#中采用的是事件驱动方式&#xff0c;但在我们使用的过程中&#xff0c;有时候通过调用系统原有的消息&#xff0c;处理起来会比较简单一些&#xff0c;特别是在处理与DLL文件的交互时&#xff0c;的确是非常的方便。 在C#中使用自定义消息 在C#中使用自定义消息非常简单&…

倪光南院士:openEuler与全球开发者共同推动计算产业发展

今日&#xff0c;以“创造最好的OS&#xff0c;成就更好的我们”为主题的 openEuler Developer Day 2021在北京成功举行。本次大会由openEuler社区发起&#xff0c;产业组织专家、学者、企业领袖和开发者们围绕多样性计算、云原生全栈、全场景协同等技术方向共同探讨和创新。大…

jhello框架-ajax

2019独角兽企业重金招聘Python工程师标准>>> 现在的web开发没有ajax都没法活&#xff0c;所以在jhello中实现了一个简单的ajax交互&#xff0c;使用json作为载体。 在上篇《交互》中讲到一种交互的方式是把数据放入Model中&#xff0c;通过ModelAndView类返回到视图…

发微信模版消息换行用\n

发微信模版消息换行用\n发微信模版消息换行用\n发微信模版消息换行用\n发微信模版消息换行用\n发微信模版消息换行用\n转载于:https://blog.51cto.com/xuqin/1974131

二次元会让人脸识别失效吗?

来源 | PyTorch 开发者社区责编 | 寇雪芹头图 | 下载于ICphoto人脸识别也遇到坑了&#xff0c;识别得了三次元&#xff0c;却对二次元无效。迪士尼的技术团队&#xff0c;正在开发这一算法&#xff0c;以帮助动画制作者进行后期搜索。团队利用 PyTorch&#xff0c;效率得到很大…

基于第四层交换技术的负载均衡

摘 要 本文介绍了第四层交换技术的概念&#xff0c;技术原理以及如何使用第四层交换技术实现远程教育系统中的应用服务器负载均衡。 作者&#xff1a; 凌仲权&#xff0c;现就读于西安电子科技大学&#xff0c;2001级硕士研究生。主要的科研方向为计算机网络技术研究以及远程教…

開始Unity3D的学习之旅

前言&#xff1a;这个系列的文章纯属对自己学习的整理&#xff0c;非高手之作。但确实的记载了我作为一个没接触过3D游戏编程的大学生的心路历程。争取每周整理一次吧。之所以会開始学Unity3D&#xff0c;最基本的原因是由于在快放暑假的时候&#xff0c;我找了一家做iPhone游戏…

linux 定时任务crond

1.定时任务crond 1.1 crond是什么 crond是linux系统中用来定期执行命令或指定程序任务的一种服务或软件。特殊需求&#xff1a;&#xff08;秒级别&#xff09;crond服务就无法搞定了&#xff0c;一般工作中写脚本守护进程执行。 为什么要使用crond定时任务&#xff1a; linux系…

用C#去除代码的SourceSafe管理

经常看一些的程序&#xff0c;有些一个解决方案带有多个项目&#xff0c;由于代码比较多&#xff0c;多人开发&#xff0c;所以好多vs.net下的工程是用source safe进行版本控制的。而用source safe进行版本控制需要局域网路径共享&#xff0c;因此好多项目换一台机器打开会出现…

用jarsigner对android apk进行签名

以前对apk重新打包签名都是用的apktool里面的Auto-sign 工具&#xff0c;后来发现有时候利用该工具对一些apk签名会失败&#xff0c;所以后来就使用 jarsigner这个工具&#xff0c;现记录一下这个工具的使用方法1 首先要生成一个自己的keyD:\>keytool -genkey -alias myKey…

利用java反射机制 读取配置文件 实现动态类载入以及动态类型转换

作者&#xff1a;54dabang 在spring的学习过程之中&#xff0c;我们能够看出通过配置文件来动态管理bean对象的优点&#xff08;松耦合 能够让零散部分组成一个总体&#xff0c;而这些总体并不在意之间彼此的细节&#xff0c;从而达到了真正的物理上的疏散耦合&#xff0c;而非…

C#操作消息队列

public class QueueManage { /// /// 发送对象到队列中 /// /// 队列名称&#xff0c;因为队列名称在一个应用中应该不改变的&#xff0c;所以大家最好写在配置文件中 /// 要发出去的对象 public static void SendQueue(string QueuePath,MyBase.SmsQueue sq) { Syste…

2021《程序员》数字科技企业研发实力榜TOP50

互联网的盛行带来了众多数字科技企业的崛起&#xff0c;但如何客观地衡量每家企业的技术实力&#xff1f;研发投入、研发人才的数量和人才密度是关键指标。2021年5月,《程序员》根据相关企业披露的财报数据及市场调研数据&#xff0c;整理发布“2021数字科技企业研发实力榜TOP5…

eclipse中java项目转换为web项目

2019独角兽企业重金招聘Python工程师标准>>> 经常在eclipse中导入web项目时&#xff0c;出现转不了项目类型的问题&#xff0c;导入后就是一个java项目&#xff0c;有过很多次经历&#xff0c;今天也有同事遇到类似问题&#xff0c;就把这个解决方法记下来吧&#x…

MySQL · 引擎介绍 · Sphinx源码剖析(三)

在本节中我会介绍Sphinx在构建索引之前做的一些事情&#xff0c;主要是从mysql拉取数据保存&#xff0c;然后分词排序保存到内存等等一系列的操作。下面是几个相关指令 sql_query \SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, \title, content \FROM doc…

C#给图片添加版权信息

现在越来越多的网站都喜欢将用户上传的图片加上网站的版权信息&#xff0c;不要以为那是用photoshop之类的图片处理软件加上去的&#xff0c;其实我们只要写一小段代码&#xff0c;就可以实现这个功能。 添加版权信息的原理其实挺简单&#xff1a;通过图片获取Graphics类的对象…

Python + 爬虫:可视化大屏帮你选粽子

来源 | 数据分析与统计学之美头图 | 下载于ICphoto端午节快要到了&#xff0c;旅游&#xff1f;回家&#xff1f;拜访亲友&#xff1f;少不了要带上粽子。那么&#xff0c;选择什么牌子的粽子呢&#xff1f;选择什么口味的粽子呢&#xff1f;选择什么价格区间呢&#xff1f;今年…

adviser vs mentor

研究生或博士生提到自己导师的时候是说adviser呢&#xff1f;还是mentor呢&#xff1f; 至少我认识一个Berkeley的博士是说adviser的。 另外&#xff0c;我的导师也是说adviser。 那还是说adviser吧……

T extends Serializable这是什么意思呢?看明白这个,你的问题就自然而然的明白了!...

1.转自&#xff1a;https://blog.csdn.net/liwenqiang758/article/details/8131185 自己动手丰衣足食!!! 泛型是Java SE 1.5的新特性&#xff0c;泛型的本质是参数化类型&#xff0c;也就是说所操作的数据类型被指定为一个参数。 这种参数类型可以用在类、接口和方法的创建中&a…

C#中switch语句注意

大家肯定对switch语句并不陌生&#xff0c;它能够让程序根据控制表达式的值&#xff0c;从多个动作中作出选择(从逻辑过程看&#xff0c;和多分支语句if&#xff0d;else有些相似)。在C和java中也有这一语句&#xff0c;不过在C#中&#xff0c;这一语句则有了些变化。先看下边一…