既然前面说了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. 海量数据挖掘MMDS week6: 支持向量机Support-Vector Machines,SVM

    http://blog.csdn.net/pipisorry/article/details/49445387 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...

  2. Android Studio 1.0RC1版发布

    Android Studio 1.0RC1 版本发布. 以下是官网该版本说明: Android Studio 1.0 Release Candidate 1 November 20th, 2014:  ...

  3. Android原生嵌入React Native

    1.首先集成的项目目录 我使用的是直接按照react-native init Project 的格式来导入的,也就是说,我的Android项目目录是跟node_modules是在一个目录下的. 我们i ...

  4. MO_GLOBAL包中一些过程和函数的使用

    DECLARE V_CURRENT_ORG_ID NUMBER; V_ACCESS_MODE VARCHAR2(2); V_OU_COUNT NUMBER; V_ORG_ID NUMBER; V_MO ...

  5. Guava 教程(4):条件,多重映射和分片

    原文出处: oschina 在本系列博客的前三章,我们大概介绍了Google的Guava类库和Collections类库,作为一名Java开发人员,相信你会从使用这些类库,进而来减少在你项目中使用样板 ...

  6. ANDROID 中设计模式的采用--行为模式

     1 职责链模式 职责链模式的意图为:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.使多个对象都有 ...

  7. jQuery的ajax使用

    一:jQuery.ajax语法基础 jQuery.ajax([options]) 概述:通过 HTTP 请求加载远程数据. jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $. ...

  8. Git与远程reposiory的相关命令

    问题1:Git如何同步远程repository的分支(branch) 某天,小C同学问我,为啥VV.git仓库里面本来已经删除了branchA这个分支,但是我的mirror中还是有这个分支呢? 分析: ...

  9. linux socket编程之TCP与UDP

    转:http://blog.csdn.net/gaoxin1076/article/details/7262482 TCP/IP协议叫做传输控制/网际协议,又叫网络通信协议 TCP/IP虽然叫传输控制 ...

  10. 图像的基本运算——scale, rotation, translation

    图像是视觉信息的直接反应,图像呈现出各种各样的特效都是通过图像的基本运算来完成的.图像最基本的运算有三种,分别是scale,rotation 和translation,叫做尺度,旋转和平移.很多图像的 ...