使用面向对象对XML进行解析:dom和dom4j的用法
这是一个比较简单的例子,主要是运用面向对象的思想,对XML文件进行解析,用dom和dom4j方法
<?xml version="1.0" encoding="utf-8"?>
<students>
<student>
<name>张三</name>
<age>20</age>
<school>北京大学</school>
</student>
<student>
<name>李四</name>
<age>18</age>
<school>清华大学</school>
</student>
</students>
代码如下:
学生对象类
package d20160624; public class Student {
private String name;
private String age;
private String school; public Student() {
} public Student(String name, String age, String school) {
this.name = name;
this.age = age;
this.school = school;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public String getSchool() {
return school;
} public void setSchool(String school) {
this.school = school;
}
//打印学生信息
public void showInfo(){
System.out.println("姓名:"+this.name+"\n年纪:"+this.age+"\n学校:"+this.school);
System.out.println("***********");
} }
dom解析:
package d20160624; import java.io.File;
import java.io.IOException; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException; /*
* 使用DOM解析student.xml,输出打印学生信息
*/
public class DomParseStudent {
private Document document;
private String name,age,school; // 生成dom树
public void getDom(File file){
// 创建解析器工厂
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
try {
// 创建解析器对象
DocumentBuilder db=dbf.newDocumentBuilder();
// 解析XML文件得到DOM树
this.document=db.parse(file);
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} }
// 解析XML
public void showEle(){
DomParseStudent dps=new DomParseStudent();
NodeList students=document.getElementsByTagName("student");
for(int i=0;i<students.getLength();i++){
Element student=(Element) students.item(i);
NodeList names=student.getElementsByTagName("name");
for(int j=0;j<names.getLength();j++){
Element name=(Element) names.item(j);
this.name=name.getTextContent();
}
NodeList ages=student.getElementsByTagName("age");
for(int k=0;k<ages.getLength();k++){
Element age=(Element) ages.item(k);
this.age=age.getTextContent();
}
NodeList schools=student.getElementsByTagName("school");
for(int p=0;p<schools.getLength();p++){
Element school=(Element) schools.item(p);
this.school=school.getTextContent();
} Student stu=new Student(name, age, school);
stu.showInfo(); }
} public static void main(String[] args){
DomParseStudent dps=new DomParseStudent();
File file=new File("D:\\Java_study\\workspace\\myeclipse\\HomeWork\\src\\d20160624\\student.xml");
dps.getDom(file);
dps.showEle();
}
}
dom4j解析:
package d20160624; import java.io.File;
import java.util.Iterator;
import java.util.List; import org.dom4j.io.SAXReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element; /*
* 使用dom4j解析student.xml,输出打印学生信息
*/
public class Dom4jStudent {
private Document document;
private String name,age,school;
// 生成dom树
public void getDom(File file){
// 创建SAXReader
SAXReader sax=new SAXReader();
try {
// 读取xml文件,生成dom树
this.document=sax.read(file);
} catch (DocumentException e) {
e.printStackTrace();
}
} // 读取XML文件
public void showXML(){
Element root=document.getRootElement();
List<Element> student=root.elements();
for(Iterator<Element> stuit=student.iterator();stuit.hasNext();){
Element stu=stuit.next();
List<Element> names=stu.elements("name");
for(Iterator<Element> name=names.iterator();name.hasNext();){
Element nameel=name.next();
this.name=nameel.getText();
}
List<Element> ages=stu.elements("age");
for(Iterator<Element> age=ages.iterator();age.hasNext();){
Element ageel=age.next();
this.age=ageel.getText();
}
List<Element> schools=stu.elements("school");
for(Iterator<Element> school=schools.iterator();school.hasNext();){
Element schoolel=school.next();
this.school=schoolel.getText();
}
Student stu1=new Student(name, age, school);
stu1.showInfo();
}
} public static void main(String[] args){
Dom4jStudent d4j=new Dom4jStudent();
File file=new File("D:\\Java_study\\workspace\\myeclipse\\HomeWork\\src\\d20160624\\student.xml");
d4j.getDom(file);
d4j.showXML();
}
}
其实2种方式,都可以,都是各种包中类的方法的使用,会灵活运用就可以了!
使用面向对象对XML进行解析:dom和dom4j的用法的更多相关文章
- XML文件解析DOM解析和SAX解析
解析一个XML文档有哪些内容解析有:dom和sax两种dom:把整个XML文档放入内存,适合XML随机访问,占用内存资源大sax:事件驱动型的XML解析方式,顺序读取,不用一次装载整个文件,遇到标签会 ...
- xml它解析----DOM解析
DOM模型(documentobject model) •DOM解析器在解析XML文档时,会把文档中的全部元素,依照其出现的层次关系.解析成一个个Node对象(节点). •在dom中.节点之间关系例如 ...
- java解析xml的方式DOM,SAX,DOM4J,JDOM,StAX
1)DOM(JAXP Crimson解析器)DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找 特定信息. ...
- java解析xml文档(dom)
DOM解析XML文档 读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵. DOM解析的特性就是读取xml文件 ...
- 解析XML文件的几种常见操作方法—DOM/SAX/DOM4j
解析XML文件的几种常见操作方法—DOM/SAX/DOM4j 一直想学点什么东西,有些浮躁,努力使自己静下心来看点东西,哪怕是回顾一下知识.看到了xml解析,目前我还没用到过.但多了解一下,加深点记忆 ...
- XML的解析方式(DOM、SAX、StAX)
(新) XML的解析方式(DOM.SAX.StAX) 博客分类: XML 一般来说,解析XML文件存在着两种方式,一种是event-based API,比如说象SAX,XNI. 第二种是tree ...
- Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
[目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...
- XML文件解析之--DOM与SAX
xml文件又称‘可扩展性标记语言’,可以对文档和数据进行结构化处理,从而能够在部门.客户和供应商之间进行交换,实现动态内容生成,企业集成和应用开发. 我们在进行web开发的时候离不开xml文件,xml ...
- XML的解析(DOM以及SAX方式)
感谢http://blog.csdn.net/redarmy_chen/article/details/12951649(关于SAX解析)以及http://blog.csdn.net/zhangerq ...
随机推荐
- JavaScript高级程序设计笔记 事件冒泡和事件捕获
1.事件冒泡 要理解事件冒泡,就得先知道事件流.事件流描述的是从页面接收事件的顺序,比如如下的代码: <body> <div> click me! </div> & ...
- 关于mvc5+EF里面的db.Entry(model).State = EntityState.Modified报错问题
最近在使用mvc5+EF的的时候用到了这句话 db.Entry(model).State = EntityState.Modified 看上去很简单的修改数据,但是一直报错,说是key已经存在,不能修 ...
- [云上天气预报-有时有闪电]2月3日23:00-4:00阿里云SLB升级期间网络会闪断
大家好,2月3日23:00-2月4日4:00,阿里云将对SLB(负载均衡)进行升级,在升级期间,SLB会有约4-8次的网络闪断.由此给您带来麻烦,望谅解! 阿里云官方公告内容如下: 尊敬的用户: 您好 ...
- Beta版本冲刺———第一天
会议照片: 项目燃尽图: 1.项目进展: 昨天的困难:对2048项目中方块颜色的调整 今天解决的进度:调整了方块的颜色,原来用UIColor.(颜色名)color颜色效果不是很好,现在改用了RGB调色 ...
- canvas三角函数直线运动
var canvas = document.getElementById("canvas"); var cxt = canvas.getContext("2d" ...
- 从 Microsoft SQL Server 迁移到 Oracle
来源于:http://www.oracle.com/technetwork/cn/database/migration/sqlserver-095136-zhs.html Oracle SQL Dev ...
- Android NestedScrolling与分发机制
在Android5.0之间要实现控件的嵌套滑动,都是要自己处理View事件即分发机制. 共有三个方法: dispatchTouchEvent().onInterceptTouchEvent()和 ...
- 获取客户端ip地址
新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 新浪多地域测试方法:http://int.dpool. ...
- Spring 配置文件中将common.properties文件外置
将配置文件的路径从项目中移出来 1. 在springApplicationContext中 <context:property-placeholder location="file:$ ...
- Java设计模式(三) 装饰模式
装饰模式:动态的将责任附加到对象上,想要扩展功能,装饰者提供有别于继承的另一种选择. 1,创建顶级类 package com.pattern.decorate; public abstract cla ...