DOM解析XML文件例子
DOM解析XML文件是一次性将目标文件中的所有节点都读入,然后再进行后续操作的方式。
一般分为以下几步:
1. 定义好目标XML文件路径path 。
2. 实例化DOM解析工厂对象 ,DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(),这种工厂类都不能用new的方式直接产生对象,必须用调用类的newInstance方法来产生对象。
3. 用上面的工厂对象生成DOM解析器对象 ,DocumentBuilder builder = factory.newDocumentBuilder()。
4. 用解析器对象对目标XML文件进行解析,得到Document文件对象 ,Document doc = builder.parse(path)。
5. 处理Document文件,获得XML文件的所有信息。 得到上面的doc对象也就相当于得到了树的根节点,就可以逐步对这可dom树进行遍历获得所有的节点信息,由于树的定义就是递归定义的,所以这里的遍历采用递归的思想最为简单。
代码如下:
首先是目标XML文件
<?xml version="1.0" encoding="utf-8"?>
<student>
<stu num="1111">
<name>张三丰</name>
<sex>男</sex>
<cla>武当</cla>
</stu>
<stu num="2345">
<name>小龙女</name>
<sex>女</sex>
<cla>古墓</cla>
</stu>
</student>
然后是解析的代码:
public class Domparse {
//用来保存解析出来的学生对象的动态链表
static ArrayList<Student> list = new ArrayList<Student>();
static Student stu;
public static void main(String[] args) throws Exception {
String path = "D:\\xmlEX\\student2.xml";
//实例化一个用来产生DOM解析器的工厂对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//使用工厂得到一个DOM解析器对象
DocumentBuilder builder = factory.newDocumentBuilder();
//解析指定的xml文件或者数据流买得到DOM对象
Document doc = builder.parse(path);
//通过DOM对象获得其中的数据,递归进行遍历
parseXML(doc);
for(Student s:list){
System.out.println(s);
}
}
/**
* 递归解析XML文件
* @param doc
*/
public static void parseXML(Node doc){
//获得doc的所有子节点
NodeList nodes = doc.getChildNodes();
//遍历所有子节点
for(int i=0;i<nodes.getLength();i++){
Node node1 = nodes.item(i);
//获得节点的名字
String str = node1.getNodeName();
//如果这个节点是一个元素节点
if(node1 instanceof Element){
//如果节点名字为stu则创建一个student对象存入队列,并且获得它的num属性
if(str.equals("stu")){
stu = new Student();
list.add(stu);
//获得该元素节点的num属性
String num = ((Element)node1).getAttribute("num");
stu.num = Integer.parseInt(num);
}else if(str.equals("name")){
stu.name = node1.getTextContent();
}else if(str.equals("sex")){
stu.sex = node1.getTextContent();
}else if(str.equals("cla")){
stu.cla = node1.getTextContent();
}
}
parseXML(node1);
}
}
}
DOM解析XML文件例子的更多相关文章
- 使用DOM解析xml文件
使用DOM解析xml文件 要解析的xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <Langu ...
- JAVA中使用DOM解析XML文件
XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...
- 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点
使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...
- Qt中使用DOM解析XML文件或者字符串二(实例)
介绍 在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表.在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档 ...
- DOM解析XML文件实例
XML文件: response: <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www ...
- dom 解析xml文件
JAXP技术 JAXP即Java Api for Xml Processing该API主要是SUN提供的用于解析XML数据的一整套解决方案,主要包含了DOM和SAX解析技术.大家可以参见SUN的以下两 ...
- Python—使用xm.dom解析xml文件
什么是DOM? 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口. 一个 DOM 的解析器在解析一个 XML 文档时,一次性读 ...
- DOM解析XML文件
1.首先把第三方代码拖进工程 GDataXMLNode.h和GDataXMLNode.m这两个文件放进工程里面 2.引入libxml2库文件 3.将GDataXMLNode.h文件中的这两个东西在工程 ...
- Dom解析XML文件具体用法
public class Dom4j { public static void main(String[] args) throws Exception { List<Student> l ...
随机推荐
- 【转载】在Jersey JAX-RS 处理泛型List等Collection
在Java中,从1.5开始,我们就可以使用泛型了(generic),这看上去很像C++ Template,但是实际上它们是不同的.在这里我不想过多的描述细节,你可以从Google上搜索一下. 但是,泛 ...
- ionic真机调试Android报错 - could not read ok from ADB Server * failed to start daemon * error: cannot connect to daemon
在使用真机调试Android程序时,报错如下: could not read ok from ADB Server * failed to start daemon error: cannot con ...
- 微信小程序组件button
表单组件button:官方文档 Demo Code: var types=['default', 'primary', 'warn']; var pageObject = { data: { defa ...
- POJ 3463 Sightseeing (次短路)
题意:求两点之间最短路的数目加上比最短路长度大1的路径数目 分析:可以转化为求最短路和次短路的问题,如果次短路比最短路大1,那么结果就是最短路数目加上次短路数目,否则就不加. 求解次短路的过程也是基于 ...
- HTML5/CSS3图片左右切换弹性动画
在线演示 本地下载
- J2EE--Hibernate基础笔记
因为写的是基础内容,所以在这里,(映射集合.映射组件.复合主键和联合主键,jpa annotation,关联映射,hql等等实用内容)都不会提到- 这里写的就是试用李刚<J2EE实战>那本 ...
- 20145109 《Java程序设计》第三周学习总结
20145109 <Java程序设计>第三周学习总结 教材学习内容总结 Chapter 4 Object 4.1 Class & Object definition of clas ...
- MapReduce:实现文档倒序排序,且字符串拼接+年+月+日
写出MapReduce程序完成以下功能. input1: -- a -- b -- c -- d -- a -- b -- c -- c input2: -- b -- a -- b -- d -- ...
- [Android]android Service后台防杀
网上有很多办法,方法一:在JNI里面fork出子进程service在单独的进程中,在service中调用JNI的代码,然后fork出一个进程,然后让我们的service进程和fork出来的子进程一直运 ...
- [洛谷3041]视频游戏的连击Video Game Combos
题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only v ...