热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

dom4j如何解析XML文件

最近在一些对xml文件的操作,下面简单写一个dom4j解析xml文件并将其封装到一个javabean中的例子,只是具有针对性的,不是通用的

最近在 一些对xml文件的操作,下面简单写一个dom4j解析xml文件并将其封装到一个javabean中的例子,只是具有针对性的,不是通用的,仅供参考哦~~

首先说:dom4j是一个java的XML api,性能优异、功能强大、易于使用。使用dom4j对xml文件进行解析,并完成对文件的封装。

接下来,主要使用到的是dom4j中的SAXReader类,在这里我的流程是传入一个xml文件,调用写好的的工具类,完成对xml文件的解析。

 

xml文件如下:

1 xml version="1.0" encoding="UTF-8"?>
2
3 <school>
4
5 <college name&#61;"数学">
6 <class name&#61;"1612A" classroom&#61;"36306">
7 <student>
8 <property name&#61;"name" value&#61;"张三">property>
9 <property name&#61;"age" value&#61;"23">property>
10 <property name&#61;"garden" value&#61;"男">property>
11 student>
12 <student>
13 <property name&#61;"name" value&#61;"李四">property>
14 <property name&#61;"age" value&#61;"22">property>
15 <property name&#61;"garden" value&#61;"女">property>
16 student>
17 <student>
18 <property name&#61;"name" value&#61;"王五">property>
19 <property name&#61;"age" value&#61;"24">property>
20 <property name&#61;"garden" value&#61;"男">property>
21 student>
22 class>
23 college>
24
25 <college name&#61;"英语">
26 <class name&#61;"1612C" classroom&#61;"35108">
27 <student>
28 <property name&#61;"name" value&#61;"赵六">property>
29 <property name&#61;"age" value&#61;"21">property>
30 <property name&#61;"garden" value&#61;"男">property>
31 student>
32 <student>
33 <property name&#61;"name" value&#61;"陈七">property>
34 <property name&#61;"age" value&#61;"22">property>
35 <property name&#61;"garden" value&#61;"男">property>
36 student>
37 <student>
38 <property name&#61;"name" value&#61;"郭八">property>
39 <property name&#61;"age" value&#61;"25">property>
40 <property name&#61;"garden" value&#61;"男">property>
41 student>
42 <student>
43 <property name&#61;"name" value&#61;"孙九">property>
44 <property name&#61;"age" value&#61;"20">property>
45 <property name&#61;"garden" value&#61;"女">property>
46 student>
47 class>
48 college>
49
50 school>

 

Junit 测试如下&#xff1a;

1 public class Dom4jTest {
2
3 &#64;Test
4 public void test() throws Exception{
5
6
7 File xmlFile &#61; new File("文件位置");
8 // 调用工具类返回学生集合
9 List studentList &#61; XMLUtil.fileTransferList(xmlFile);
10
11 for (Student student : studentList) {
12
13 System.out.println("-------------------------");
14 System.out.println("姓名&#xff1a;"&#43;student.getName());
15 System.out.println("年龄&#xff1a;"&#43;student.getAge());
16 System.out.println("性别&#xff1a;"&#43;student.getGarden());
17
18 }
19
20 }
21
22 }

工具类如下&#xff1a;

1 public class XMLUtil {
2
3 public static List fileTransferList(File file) throws DocumentException{
4
5 // 返回值&#xff1a;学生信息集合
6 List studentList&#61;new ArrayList();
7
8 // 创建saxReader对象
9 SAXReader reader &#61; new SAXReader();
10
11 // 通过read方法读取一个文件 转换成Document对象
12 Document document &#61; reader.read(file);
13
14 //获取根节点元素对象
15 Element root &#61; document.getRootElement();
16
17 // 获取学院节点集合
18 List collegeElements &#61; root.elements();
19
20 //已知属性名情况下
21 for (Element college : collegeElements) {
22
23 List collegeStudentList &#61; getStudentListFromCollegeElement(college);
24
25 studentList.addAll(collegeStudentList);
26 }
27
28 return studentList;
29 }
30
31 private static List getStudentListFromCollegeElement(Element collegeElement){
32
33 // 返回值&#xff1a;学生信息集合
34 List studentList &#61; new ArrayList();
35
36 List classElements &#61; collegeElement.elements();
37
38 for (Element classElement : classElements) {
39
40 List classStudentList &#61; getStudentListFromClassElement(classElement);
41
42 studentList.addAll(classStudentList);
43 }
44
45 return studentList;
46
47 }
48
49 private static List getStudentListFromClassElement(Element classElement){
50
51 // 返回值&#xff1a;学生信息集合
52 List studentList &#61; new ArrayList();
53
54 List studentElements &#61; classElement.elements();
55
56 for (Element student : studentElements) {
57
58 List propertyElements &#61; student.elements();
59
60 Student student2 &#61; studentElementTransferStudentEntity(propertyElements);
61
62 studentList.add(student2);
63 }
64
65 return studentList;
66 }
67
68 private static Student studentElementTransferStudentEntity(List propertyElements){
69
70 Student stu &#61; new Student();
71
72 for (Element property : propertyElements) {
73
74 String name &#61; property.attributeValue("name");
75 String value &#61; property.attributeValue("value");
76
77 if("name".equals(name)){
78 stu.setName(value);
79 }
80 if("age".equals(name)){
81 stu.setAge(value);
82 }
83 if("garden".equals(name)){
84 stu.setGarden(value);
85 }
86 }
87
88 return stu;
89 }
90
91 }

最后呢&#xff0c;当然是显示结果了~~

结果如下&#xff1a;

到此结束了&#xff0c;以后也许有有其他解析的方法&#xff0c;也希望各位同道一块学习~~

 

转:https://www.cnblogs.com/yuexuan/p/6137874.html



推荐阅读
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
author-avatar
百变精装绣
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有