首先来了解点Java DOM 的 API:

1.解析器工厂类:DocumentBuilderFactory

创建的方法:DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

2.解析器:DocumentBuilder

创建方法:通过解析器工厂类来获得 DocumentBuilder db = dbf.newDocumentBuilder();

3.文档树模型Document

创建方法:a.通过xml文档 Document doc = db.parse("bean.xml");  b.将需要解析的xml文档转化为输入流 InputStream is = new FileInputStream("bean.xml");

Document doc = db.parse(is);

Document对象代表了一个XML文档的模型树,所有的其他Node都以一定的顺序包含在Document对象之内,排列成一个树状结构,以后对XML文档的所有操作都与解析器无关,

直接在这个Document对象上进行操作即可;

包含的方法:

4.节点列表类NodeList

NodeList代表了一个包含一个或者多个Node的列表,根据操作可以将其简化的看做为数组

5.节点类Node

Node对象是DOM中最基本的对象,代表了文档树中的抽象节点。但在实际使用中很少会直接使用Node对象,而是使用Node对象的子对象Element,Attr,Text等

6.元素类Element

是Node类最主要的子对象,在元素中可以包含属性,因而Element中有存取其属性的方法

7.属性类Attr

代表某个元素的属性,虽然Attr继承自Node接口,但因为Attr是包含在Element中的,但并不能将其看做是Element的子对象,因为Attr并不是DOM树的一部分

基本的知识就到此结束,更加具体的大家可以参阅JDK API文档

实战:

1.使用DOM来遍历XML文档中的全部内容并且插入元素:

school.xml文档:

沈浪

1006010022

信管2

浙江杭州3

123456

沈1

1006010033

信管1

浙江杭州4

234567

沈2

1006010044

生工2

浙江杭州1

345678

沈3

1006010055

电子2

浙江杭州2

456789

DomDemo.java

1   packagexidian.sl.dom;2 importjava.io.FileOutputStream;3

4 importjavax.xml.parsers.DocumentBuilder;5 importjavax.xml.parsers.DocumentBuilderFactory;6

7 importorg.apache.crimson.tree.XmlDocument;8 importorg.w3c.dom.Document;9 importorg.w3c.dom.Element;10 importorg.w3c.dom.NodeList;11

12

13 public classDomDemo {14 /**

15 * 遍历xml文档16 **/

17 public static voidqueryXml(){18 try{19 //得到DOM解析器的工厂实例

20 DocumentBuilderFactory dbFactory =DocumentBuilderFactory.newInstance();21 //从DOM工厂中获得DOM解析器

22 DocumentBuilder dbBuilder =dbFactory.newDocumentBuilder();23 //把要解析的xml文档读入DOM解析器

24 Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");25 System.out.println("处理该文档的DomImplementation对象 = "+doc.getImplementation());26 //得到文档名称为Student的元素的节点列表

27 NodeList nList = doc.getElementsByTagName("Student");28 //遍历该集合,显示结合中的元素及其子元素的名字

29 for(int i = 0; i< nList.getLength() ; i ++){30 Element node =(Element)nList.item(i);31 System.out.println("Name: "+ node.getElementsByTagName("Name").item(0).getFirstChild().getNodeValue());32 System.out.println("Num: "+ node.getElementsByTagName("Num").item(0).getFirstChild().getNodeValue());33 System.out.println("Classes: "+ node.getElementsByTagName("Classes").item(0).getFirstChild().getNodeValue());34 System.out.println("Address: "+ node.getElementsByTagName("Address").item(0).getFirstChild().getNodeValue());35 System.out.println("Tel: "+ node.getElementsByTagName("Tel").item(0).getFirstChild().getNodeValue());36 }37

38 }catch(Exception e) {39 //TODO: handle exception

40 e.printStackTrace();41 }42 }43 /**

44 * 向已存在的xml文件中插入元素45 **/

46 public static voidinsertXml(){47 Element school = null;48 Element student = null;49 Element name = null;50 Element num = null;51 Element classes = null;52 Element address = null;53 Element tel = null;54 try{55 //得到DOM解析器的工厂实例

56 DocumentBuilderFactory dbFactory =DocumentBuilderFactory.newInstance();57 //从DOM工厂中获得DOM解析器

58 DocumentBuilder dbBuilder =dbFactory.newDocumentBuilder();59 //把要解析的xml文档读入DOM解析器

60 Document doc = dbBuilder.parse("src/xidian/sl/dom/school.xml");61 //得到文档名称为Student的元素的节点列表

62 NodeList nList = doc.getElementsByTagName("School");63 school = (Element)nList.item(0);64 //创建名称为Student的元素

65 student = doc.createElement("Student");66 //设置元素Student的属性值为231

67 student.setAttribute("examId", "23");68 //创建名称为Name的元素

69 name = doc.createElement("Name");70 //创建名称为 香香 的文本节点并作为子节点添加到name元素中

71 name.appendChild(doc.createTextNode("香香"));72 //将name子元素添加到student中

73 student.appendChild(name);74 /**

75 * 下面的元素依次加入即可76 **/

77 num = doc.createElement("Num");78 num.appendChild(doc.createTextNode("1006010066"));79 student.appendChild(num);80

81 classes = doc.createElement("Classes");82 classes.appendChild(doc.createTextNode("眼视光5"));83 student.appendChild(classes);84

85 address = doc.createElement("Address");86 address.appendChild(doc.createTextNode("浙江温州"));87 student.appendChild(address);88

89 tel = doc.createElement("Tel");90 tel.appendChild(doc.createTextNode("123890"));91 student.appendChild(tel);92

93 //将student作为子元素添加到树的根节点school

94 school.appendChild(student);95 //将内存中的文档通过文件流生成insertSchool.xml,XmlDocument位于crison.jar下

96 ((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/dom/insertSchool.xml"));97 System.out.println("成功");98 }catch(Exception e) {99 //TODO: handle exception

100 e.printStackTrace();101 }102 }103 public static voidmain(String[] args){104 //读取

105 DomDemo.queryXml();106 //插入

107 DomDemo.insertXml();108 }109 }110

运行后结果:

然后到目录下查看生成的xml文件:

打开查看内容:

上面添加元素后输出的文件与之前的文件不是同一个文件,如果需要输出到原文件中,那么只要将路径改为原文间路径即可:src/xidian/sl/dom/school.xml

2.创建XML过程与插入过程相似,就是Document需要创建

packagexidian.sl.dom;importjava.io.FileOutputStream;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importorg.apache.crimson.tree.XmlDocument;importorg.w3c.dom.Document;importorg.w3c.dom.Element;public classCreateNewDom {/*** 创建xml文档

**/

public static voidcreateDom(){

Document doc;

Element school,student;

Element name= null;

Element num= null;

Element classes= null;

Element address= null;

Element tel= null;try{//得到DOM解析器的工厂实例

DocumentBuilderFactory dbFactory =DocumentBuilderFactory.newInstance();//从DOM工厂中获得DOM解析器

DocumentBuilder dbBuilder =dbFactory.newDocumentBuilder();//创建文档树模型对象

doc =dbBuilder.newDocument();if(doc != null){//创建school元素

school = doc.createElement("School");//创建student元素

student = doc.createElement("Student");//设置元素Student的属性值为231

student.setAttribute("examId", "23");//创建名称为Name的元素

name = doc.createElement("Name");//创建名称为 香香 的文本节点并作为子节点添加到name元素中

name.appendChild(doc.createTextNode("香香"));//将name子元素添加到student中

student.appendChild(name);/*** 下面的元素依次加入即可

**/num= doc.createElement("Num");

num.appendChild(doc.createTextNode("1006010066"));

student.appendChild(num);

classes= doc.createElement("Classes");

classes.appendChild(doc.createTextNode("眼视光5"));

student.appendChild(classes);

address= doc.createElement("Address");

address.appendChild(doc.createTextNode("浙江温州"));

student.appendChild(address);

tel= doc.createElement("Tel");

tel.appendChild(doc.createTextNode("123890"));

student.appendChild(tel);//将student作为子元素添加到树的根节点school

school.appendChild(student);//添加到文档树中

doc.appendChild(school);//将内存中的文档通过文件流生成insertSchool.xml,XmlDocument位于crison.jar下

((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/dom/createSchool.xml"));

System.out.println("创建成功");

}

}catch(Exception e) {//TODO: handle exception

e.printStackTrace();

}

}public static voidmain(String[] args) {

CreateNewDom.createDom();

}

}

运行结果:

DOM的操作应该还是非常简单明了的,掌握了没哦。

java w3c xml_org.w3c.dom(java dom)解析XML文档相关推荐

  1. 分别使用dom和dom4j解析XML文档

    1.dom和dom4j的特点 dom是基于XML的树结构来完成解析的.dom解析XML文档时,会根据读取的文档,构建一个驻留内存的树结构,然后就可以使用dom接口来对XML文档进行增删查改等操作.do ...

  2. java使用org.w3c.dom解析XML文档,创建、增删查改,保存,读取,遍历元素等操作

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用org.w3c.dom(java dom)解析XML文档,创建.增删查改,保存,读取,遍历元素等操作 在保存文件时需要载入crimso ...

  3. JAVA中利用DOM解析XML文档

    JAVA中利用DOM解析XML文档 package org.sws.utils; import java.io.File;import java.io.IOException; import java ...

  4. xml教程之java解析xml文档

    1.java解析xml文件介绍 XML解析方式分为两种:DOM方式和SAX方式 DOM:Document Object Model,文档对象模型.这种方式是W3C推荐的处理XML的一种方式. SAX: ...

  5. Java 使用SAX解析XML文档

    DOM,即Document Object Model,中文叫文档对象模型.DOM是W3C定义的标准文档对象模型,是一个与操作系统和编程语言无关的.用于内存存储和操作层次化文档的模型.当按 照DOM模型 ...

  6. java jdom解析xml文件_Java 使用JDOM解析XML文档

    使用JDOM解析XML文档 JDOM是一种使用 XML(标准通用标记语言下的一个子集) 的独特 Java 工具包.下面我们来看一下怎么使用 JDOM来解析XML文档. 首先下载JDOM的jar包,并导 ...

  7. 【Qt】DOM创建和操作XML文档

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 创建XML文档 04. 读取XML文档 05. 增加XML节点 06. 查找.删除.更新XML文档 07. 附录 01. ...

  8. [Qt教程] 第28篇 XML(二)使用DOM创建和操作XML文档

    [Qt教程] 第28篇 XML(二)使用DOM创建和操作XML文档 楼主  发表于 2013-5-21 22:00:51 | 查看: 475| 回复: 0 使用DOM创建和操作XML文档 版权声明 该 ...

  9. Android数据存储——2.文件存储_C_DOM解析XML文档

    今天学习Android数据存储--文件存储_DOM解析XML文档 位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效 ...

  10. 大杂烩 -- 四种生成和解析XML文档的方法详解

    基础大杂烩 -- 目录 众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J DOM:在现在的Java JDK里都自带了,在xml-apis.jar包 ...

最新文章

  1. Linux系统下的/etc/nsswitch.conf文件
  2. Phalcon入门教程之安装
  3. Web安全之XSS漏洞
  4. Android动态加载技术三个关键问题详解
  5. 论文学习11-Adversarial training for multi-context joint entity and relation extraction(实体关系买抽取模型,对抗学习
  6. source insight常用命令--实际使用中比较常用的
  7. OpenVINO 部署 Mask-RCNN 实例分割
  8. 【PMP】工作分解结构WBS详解
  9. 一个exfat U盘引起的systen crash
  10. Django + MySQL + Redis 编写简单的高校求职招聘管理系统 in English(毕设+源码)
  11. 谷粒微博学习笔记一:Utilsconstants
  12. kotlin的先决条件函数
  13. 到底什么是BFC、IFC、GFC和FFC,次奥?
  14. APR协议及RARP协议
  15. 介绍Jackson JsonParser解析json
  16. 深度强化学习——actor-critic算法(4)
  17. RV1109_RV1126 EVB板连接时List of devices attached
  18. 本人机械专业研究生,研一暑假开始正式接触深度学习相关内容,想通过写文章记录以及分享下学习的历程,让大家可以避免坑以及记录下自己成长的过程。今天是第一天,安装opencv包出现的问题。
  19. myeclipse 加载SVN报 Could not create the view: org.tigris.subversion.subclipse.ui.repository.Rep
  20. 基于预训练模型的军事领域命名实体识别研究

热门文章

  1. Vue3---安装Element-Plus组件库
  2. AVFoundation – AVAssetTrack 获取视频 音频信息
  3. BugkuCTF-MISC题旋转跳跃
  4. 一个服务器上放多个网站,一个云服务器放多个网站吗
  5. 配置文件存int类型_Redis详解(五)------ redis的五大数据类型实现原理
  6. c语言程序设计题2015,2015年荐C语言程序设计等级考试习题汇编.doc
  7. mysql数据库初识实训总结_MySQL(数据库)的初识
  8. mysql 自定义序列号_在mysql中怎样设置,才能自动添加序列号
  9. k8s pod里访问不到外部ip_K8S容器网络如何实现通信?
  10. python3类的继承详解_基于python3 类的属性、方法、封装、继承详解