既然前面说了DOM4J这里好那里好,大家都是在用这个,那咱就不得不写一个了。

XML文件:

 <?xml version="1.0" encoding="UTF-8" ?>
<person>
<from where="Others">
<name>Jack</name>
<age>25</age>
<sex>boy</sex>
<hobby>sing songs</hobby>
</from>
<from where="China">
<name>桔子桑</name>
<age>26</age>
<sex>男</sex>
<hobby>看书、画画</hobby>
</from>
</person>

Person类,用于存储解析所得信息:

 package com.dom.node;

 public class Person {
String where;
String name;
String age;
String sex;
String hobby;
public void setWhere(String where) {
this.where = where;
}
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
@Override
public String toString() {
return "Person [where=" + where + ", name=" + name + ", age=" + age + ", sex=" + sex + ", hobby=" + hobby + "]";
}
}

DOM4J解析方法类:

 package com.dom.node;

 import java.util.*;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; public class Dom4jxml {
public static void main(String[] args) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read("file/clear.xml");
Element rootElement = document.getRootElement();
Iterator<Element> it =rootElement.elementIterator();
List<Person> personlist = new ArrayList<Person>();
while(it.hasNext()) {
Person person = new Person();
Element son1=(Element)it.next();
List<Attribute> attrlist1 =son1.attributes();
for (Attribute attr : attrlist1) {
if(attr.getName().equals("where")) {
person.setWhere(attr.getValue());
}
}
Iterator itt = son1.elementIterator();
while(itt.hasNext()) {
Element son2 =(Element)itt.next();
if(son2.getName().equals("name")) {
person.setName(son2.getStringValue());
}else if(son2.getName().equals("age")) {
person.setAge(son2.getStringValue());
}else if(son2.getName().equals("sex")) {
person.setSex(son2.getStringValue());
}else if(son2.getName().equals("hobby")) {
person.setHobby(son2.getStringValue());
}
}
personlist.add(person);
person=null;
}
System.out.println("总人数:"+personlist.size()+"人");
for (Person person : personlist) {
System.out.println(person.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

控制台打印输出:

总人数:2人
Person [where=Others, name=Jack, age=25, sex=boy, hobby=sing songs]
Person [where=China, name=桔子桑, age=26, sex=男, hobby=看书、画画]

总结一下其中获取节点相关数据的方法吧,以免混淆;

SAXReader reader = new SAXReader();                                     //新建SAXReader对象

Document document = reader.read("file/clear.xml");                    //read()方法将xml文件载入当前程序

Element rootElement = document.getRootElement();                  //getRootElement()方法获取文档的根节点

Iterator<Element> it =rootElement.elementIterator();                   //elementIterator()返回一个迭代器

attributes() ;                                                                                   //返回节点的属性(List集合)

getName();                                                                                    //得到属性名或者节点名

getValue();                                                                                     //得到属性值

getStringValue();                                                                            //得到节点内部的字符串

javaXML文件解析之DOM4J实操的更多相关文章

  1. Java---XML的解析(2)-DOM4J解析/Xpath

    Dom4j: Dom SUN dom在加载时,将所有元素全部加载内存 DOM4j - 第三方. Dom4j是一个开源.灵活的XML API. 目前很多开源框架如struts,hibernate都使用d ...

  2. java--xml文件读取(JDOM&DOM4J)

    1.JDOM解析 首先导入额外的jar包: Build Path:jdom-2.0.6.jar 准备工做获取到子节点的集合: package com.imooc_xml.jdom.text; impo ...

  3. XML文件解析之DOM4J解析

    1.DOM4J介绍 dom4j的官网是http://www.dom4j.org/dom4j-1.6.1/,最新的版本是1.6.1,根据官网介绍可知.dom4j是一个易用的.开源的库,应用于Java平台 ...

  4. fso文件夹操作用法实操

    Sub 订单转换()Application.ScreenUpdating = FalseOn Error Resume Next Dim fso, fl, m%, n%, p%, q& Dim ...

  5. [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]

    [Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...

  6. XML文件解析-DOM4J方式和SAX方式

    最近遇到的工作内容都是和xml内容解析相关的. 1图片数据以base64编码的方式保存在xml的一个标签中,xml文件通过接口的方式发送给我,然后我去解析出图片数据,对图片进行进一步处理. 2.xml ...

  7. 【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序

    最近通过 PyQt5 设计了一个下载服务器指定日期日志文件的程序,里面有些有意思的技术点,现在做一些分享. PyQt5 是一套 Python 绑定 Digia Qt5 应用的框架,是最强大的 GUI ...

  8. mPaaS 小程序架构解析 | 实操演示小程序如何实现多端开发

    对于 mPaaS 小程序开发框架,想必读者们并不陌生.它源自于支付宝小程序框架,继承了易开发性.跨平台性及 Native 性能,不仅帮助开发者实现面向自有 App 投放小程序,还可快速构建打包,覆盖支 ...

  9. Linux基础实操六

    实操一: 临时配置网络(ip,网关,dns)+永久配置 #ifconfig ens33 192.168.145.134/24 #vim /etc/resolv.conf #route add defa ...

随机推荐

  1. GROUP BY 的实现与优化

    由于GROUP BY实际上也同样需要进行排序操作,而且与ORDER BY相比,GROUP BY主要只是多了排序之后的分组操作.当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的 ...

  2. 解决log4cxx退出时的异常

    解决log4cxx退出时的异常(金庆的专栏)如果使用log4cxx的FileWatchdog线程来监视日志配置文件进行动态配置,就可能碰到程序退出时产生的异常.程序退出时清理工作耗时很长时,该异常很容 ...

  3. Python学习笔记 - 字符串和编码

    #!/usr/bin/env python3 # -*- coding: utf-8 -*- #第一行注释是为了告诉Linux/OS X系统, #这是一个Python可执行程序,Windows系统会忽 ...

  4. Ext JS 5初探(三)

    在上文提到了本地化文件的问题,然后在Ext JS 5的包里找了找,居然还没包含本地化包.我估计目前还不到考虑本地化的时候.在Sencha Touch中,是没有本地化包的,但是要让Ext JS也不包含本 ...

  5. 《java入门第一季》之面向对象(匿名内部类)

    1.认识匿名内部类 /* 匿名内部类 就是内部类的简化写法. 前提:存在一个类或者接口 这里的类可以是具体类也可以是抽象类. 匿名内部类的格式: new 类名或者接口名(){ 重写方法; }:这代表的 ...

  6. STL常用查找算法介绍

    adjacent_find() 在iterator对标识元素范围内,查找一对相邻重复元素,找到则返回指向这对元素的第一个元素的迭代器.否则返回past-the-end. #include <io ...

  7. TrueType和Bitmap字体的区别

    只要标签的文本从不变化,在cocos2D中渲染TrueType和bitmap字体的性能是相同的.它们都仅仅像精灵那样绘制. 如果你希望大量的标签使用相同字体,则bitmap字体将更快.因为bitmap ...

  8. 队列顺序存储 - 设计与实现 - API函数

    队列是一种特殊的线性表 队列仅在线性表的两端进行操作 队头(Front):取出数据元素的一端 队尾(Rear):插入数据元素的一端 队列不允许在中间部位进行操作! queue常用操作 销毁队列 清空队 ...

  9. Xcode出现may cause a leak非忽略的解决方法

    前面提到可以把may cause a leak当成安静的美代码忽略掉,但其实还是有另一种方法滴. 你可以用如下代码替换以消除該警告: [xxx performSelector:_cmd withObj ...

  10. LeetCode之“动态规划”:Decode Ways

    题目链接 题目要求: A message containing letters from A-Z is being encoded to numbers using the following map ...