org.w3c.dom(javadom)解析XML⽂档
位于org.w3c.dom操作XML会⽐较简单,就是将XML看做是⼀颗树,DOM就是对这颗树的⼀个数据结构的描述,但对⼤型XML⽂件效果可能会不理想⾸先来了解点Java DOM 的 API:
1.解析器⼯⼚类:DocumentBuilderFactory
创建的⽅法:DocumentBuilderFactory dbf = wInstance();
2.解析器:DocumentBuilder
创建⽅法:通过解析器⼯⼚类来获得 DocumentBuilder db = wDocumentBuilder();
3.⽂档树模型Document
创建⽅法:a.通过xml⽂档 Document doc = db.parse("l"); b.将需要解析的xml⽂档转化为输⼊流 InputStream is = new FileInputStream("l");
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⽂档中的全部内容并且插⼊元素:
<?xml version = "1.0" encoding = "utf-8"?>
<School>
<Student>
<Name>沈浪</Name>
<Num>1006010022</Num>
广州惠普维修点<Classes>信管2</Classes>
<Address>浙江杭州3</Address>
<Tel>123456</Tel>
</Student>
<Student>
<Name>沈1</Name>
赛尔号pve<Num>1006010033</Num>
<Classes>信管1</Classes>
<Address>浙江杭州4</Address>
<Tel>234567</Tel>
</Student>
<Student>
<Name>沈2</Name>
<Num>1006010044</Num>
<Classes>⽣⼯2</Classes>
<Address>浙江杭州1</Address>
体育教师工作计划<Tel>345678</Tel>
</Student>
<Student>
<Name>沈3</Name>
<Num>1006010055</Num>
<Classes>电⼦2</Classes>
<Address>浙江杭州2</Address>
<Tel>456789</Tel>
</Student>
</School>
DomDemo.java
1 package xidian.sl.dom;
2import java.io.FileOutputStream;
3
l.parsers.DocumentBuilder;
l.parsers.DocumentBuilderFactory;
6
7import XmlDocument;
8import org.w3c.dom.Document;
9import org.w3c.dom.Element;
10import org.w3c.dom.NodeList;
11
12
13public class DomDemo {
14/**
15 * 遍历xml⽂档
16 * */
17public static void queryXml(){
18try{
19//得到DOM解析器的⼯⼚实例
20 DocumentBuilderFactory dbFactory = wInstance();
21//从DOM⼯⼚中获得DOM解析器
22 DocumentBuilder dbBuilder = wDocumentBuilder();
23//把要解析的xml⽂档读⼊DOM解析器
24 Document doc = dbBuilder.parse("src/xidian/sl/l");
25 System.out.println("处理该⽂档的DomImplementation对象 = "+ Implementation());
26//得到⽂档名称为Student的元素的节点列表
27 NodeList nList = ElementsByTagName("Student");
28//遍历该集合,显⽰结合中的元素及其⼦元素的名字
29for(int i = 0; i< Length() ; i ++){
30 Element node = (Element)nList.item(i);
31 System.out.println("Name: "+ ElementsByTagName("Name").item(0).getFirstChild().getNodeValue());
32 System.out.println("Num: "+ ElementsByTagName("Num").item(0).getFirstChild().getNodeValue());
33 System.out.println("Classes: "+ ElementsByTagName("Classes").item(0).getFirstChild().getNodeValue());
34 System.out.println("Address: "+ ElementsByTagName("Address").item(0).getFirstChild().getNodeValue());
35 System.out.println("Tel: "+ ElementsByTagName("Tel").item(0).getFirstChild().getNodeValue());
36 }
37
38 }catch (Exception e) {
39// TODO: handle exception
以爱为话题作文40 e.printStackTrace();
41 }
42 }
43/**
44 * 向已存在的xml⽂件中插⼊元素
45 * */
46public static void insertXml(){
47 Element school = null;
48 Element student = null;
49 Element name = null;
50 Element num = null;
51 Element classes = null;
52 Element address = null;青春有你2开播时间
53 Element tel = null;
54try{
55//得到DOM解析器的⼯⼚实例
56 DocumentBuilderFactory dbFactory = wInstance();
57//从DOM⼯⼚中获得DOM解析器
58 DocumentBuilder dbBuilder = wDocumentBuilder();
59//把要解析的xml⽂档读⼊DOM解析器
60 Document doc = dbBuilder.parse("src/xidian/sl/l");
61//得到⽂档名称为Student的元素的节点列表
62 NodeList nList = ElementsByTagName("School");
63 school = (Element)nList.item(0);
64//创建名称为Student的元素
65 student = ateElement("Student");
66//设置元素Student的属性值为231
67 student.setAttribute("examId", "23");
68//创建名称为Name的元素
69 name = ateElement("Name");
70//创建名称为⾹⾹的⽂本节点并作为⼦节点添加到name元素中
71 name.ateTextNode("⾹⾹"));
72//将name⼦元素添加到student中
73 student.appendChild(name);
74/**
75 * 下⾯的元素依次加⼊即可
76 * */
77 num = ateElement("Num");
78 num.ateTextNode("1006010066"));
79 student.appendChild(num);
80
81 classes = ateElement("Classes");
82 classes.ateTextNode("眼视光5"));
83 student.appendChild(classes);
84
85 address = ateElement("Address");
86 address.ateTextNode("浙江温州"));
5年高考3年模拟87 student.appendChild(address);
88
89 tel = ateElement("Tel");
90 tel.ateTextNode("123890"));
91 student.appendChild(tel);
92
93//将student作为⼦元素添加到树的根节点school
94 school.appendChild(student);
95//将内存中的⽂档通过⽂件流⽣成l,XmlDocument位于crison.jar下
96 ((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/l"));
97 System.out.println("成功");
98 }catch (Exception e) {
99// TODO: handle exception
100 e.printStackTrace();
101 }
102 }
103public static void main(String[] args){
104//读取
105 DomDemo.queryXml();
106//插⼊
107 DomDemo.insertXml();
108 }
109 }
110
运⾏后结果:
然后到⽬录下查看⽣成的xml⽂件:
打开查看内容:
上⾯添加元素后输出的⽂件与之前的⽂件不是同⼀个⽂件,如果需要输出到原⽂件中,那么只要将路径改为原⽂间路径即可:src/xidian/sl/l
2.创建XML过程与插⼊过程相似,就是Document需要创建
package xidian.sl.dom;
import java.io.FileOutputStream;
l.parsers.DocumentBuilder;
l.parsers.DocumentBuilderFactory;
import XmlDocument;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class CreateNewDom {
/**
* 创建xml⽂档
* */
public static void createDom(){
Document doc;
Element school,student;
Element name = null;
Element num = null;
Element classes = null;
Element address = null;
Element tel = null;
try{
//得到DOM解析器的⼯⼚实例
DocumentBuilderFactory dbFactory = wInstance();
//从DOM⼯⼚中获得DOM解析器
DocumentBuilder dbBuilder = wDocumentBuilder();
//创建⽂档树模型对象
doc = wDocument();
if(doc != null){
//创建school元素
school = ateElement("School");
//创建student元素
student = ateElement("Student");
//设置元素Student的属性值为231
student.setAttribute("examId", "23");
//创建名称为Name的元素
name = ateElement("Name");
//创建名称为⾹⾹的⽂本节点并作为⼦节点添加到name元素中
name.ateTextNode("⾹⾹"));
//将name⼦元素添加到student中
student.appendChild(name);
/**
* 下⾯的元素依次加⼊即可
* */
num = ateElement("Num");
num.ateTextNode("1006010066"));
student.appendChild(num);
classes = ateElement("Classes");
classes.ateTextNode("眼视光5"));
student.appendChild(classes);
address = ateElement("Address");
address.ateTextNode("浙江温州"));
student.appendChild(address);
tel = ateElement("Tel");
tel.ateTextNode("123890"));
student.appendChild(tel);
/
/将student作为⼦元素添加到树的根节点school
school.appendChild(student);
//添加到⽂档树中
doc.appendChild(school);
//将内存中的⽂档通过⽂件流⽣成l,XmlDocument位于crison.jar下
((XmlDocument)doc).write(new FileOutputStream("src/xidian/sl/l")); System.out.println("创建成功");
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static void main(String[] args) {
}
}
运⾏结果:
DOM的操作应该还是⾮常简单明了的,掌握了没哦。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论