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文件例子的更多相关文章

  1. 使用DOM解析xml文件

    使用DOM解析xml文件 要解析的xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <Langu ...

  2. JAVA中使用DOM解析XML文件

    XML是一种方便快捷高效的数据保存传输的格式,在JSON广泛使用之前,XML是服务器和客户端之间数据传输的主要方式.因此,需要使用各种方式,解析服务器传送过来的信息,以供使用者查看. JAVA作为一种 ...

  3. 使用DOM解析XML文件,、读取xml文件、保存xml、增加节点、修改节点属性、删除节点

    使用的xml文件 <?xml version="1.0" encoding="GB2312" ?> <PhoneInfo> <Br ...

  4. Qt中使用DOM解析XML文件或者字符串二(实例)

    介绍 在Qt中提供了QtXml模块实现了对XML数据的处理,我们在Qt帮助中输入关键字QtXml Module,可以看到该模块的类表.在这里我们可以看到所有相关的类,它们主要是服务于两种操作XML文档 ...

  5. DOM解析XML文件实例

    XML文件: response: <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www ...

  6. dom 解析xml文件

    JAXP技术 JAXP即Java Api for Xml Processing该API主要是SUN提供的用于解析XML数据的一整套解决方案,主要包含了DOM和SAX解析技术.大家可以参见SUN的以下两 ...

  7. Python—使用xm.dom解析xml文件

    什么是DOM? 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口. 一个 DOM 的解析器在解析一个 XML 文档时,一次性读 ...

  8. DOM解析XML文件

    1.首先把第三方代码拖进工程 GDataXMLNode.h和GDataXMLNode.m这两个文件放进工程里面 2.引入libxml2库文件 3.将GDataXMLNode.h文件中的这两个东西在工程 ...

  9. Dom解析XML文件具体用法

    public class Dom4j { public static void main(String[] args) throws Exception { List<Student> l ...

随机推荐

  1. idea导入项目出现Unable to import maven project: See logs for details提示(转载)

    摘要: 从git上面check多工程项目后,maven不能正常下载相应的依赖,最后查询国外网站,找出错误原因.按照此步骤,可以自动配置好每个工程的module. 删除项目根目录下.idea文件夹 关闭 ...

  2. 吴超老师课程--HBASE的查询手机项目

    查询1.按RowKey查询2.按手机号码查询3.按手机号码的区域查询 //查询手机13450456688的所有上网记录 public static void scan(String tableName ...

  3. Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索"

    Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索" //匹配右边 var   reg: TPerlRegEx; begin   ...

  4. PAT 天梯赛 L1-002 【递归】

    题目链接 https://www.patest.cn/contests/gplt/L1-002 题意 给出一个数字 和一个字符 画出 可用数字下的最大沙漏,并且输出剩余没用掉的符号数 思路 可以先打一 ...

  5. POJ 1659 Frogs' Neighborhood (Havel定理构造图)

    题意:根据图的度数列构造图 分析:该题可根据Havel定理来构造图.Havel定理对可图化的判定: 把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d ...

  6. LeetCode: Find Largest Value in Each Tree Row

    BFS /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...

  7. Linux系统启动管理 系统安全

    Linux GRUB加密方法 加密grub防止黑客通过单用户系统破解root密码 ,进入系统窃取数据.给grub加密,不让别人通过grub进入单用户.  生成密码 [root@localhost ~] ...

  8. 【Head First Servlets and JSP】笔记20:EL以及<jsp:useBean ....>的补充

    1.EL的英文是Expression Language,译成中文就是“表达式语言”.这是一种给前端程序员使用的脚本语言,EL与Java表达式相比并没有什么“天壤之别”,在后端程序员看来多少有点“多此一 ...

  9. EasyUI:datagrid控件简介

    EasyUI:datagrid控件简介 1,水平滚动条属性: //显示滚动条 fitColumns:false //不显示滚动条 fitColumns:true

  10. Tomcat 线程池配置

    线程池 Executor代表了一个线程池,可以在Tomcat组件之间共享.使用线程池的好处在于减少了创建销毁线程的相关消耗,而且可以提高线程的使用效率.要想使用线程池,首先需要在 Service标签中 ...