DOM操作,多用来读xml文件件,写很少用,无论读写操作的步骤都是固定的按照下面的格式套用即可。
//导入DOM包
import org.w3c.dom.*;
//导入java的实现包
import javax.xml.parsers.*;
import java.io.*;
import org.xml.sax.*;
public class ExTestXml{
//关于xml的DOM操作,使用工厂模式实现
//声明文档工厂
private javax.xml.parsers.DocumentBuilderFactory df = null;
//声明文档构建器
private javax.xml.parsers.DocumentBuilder db = null;
//生成要操作的文档
private org.w3c.dom.Document doc = null;
public ExTestXml() {
}
//生成xml文件
public void write() {
//实例化文档工厂
df = DocumentBuilderFactory.newInstance();
//根据工厂生成文档构建器
try {
db = df.newDocumentBuilder();
//根据文档构建器生成文档
doc = db.newDocument();
//生成文档根元素
Element banji = doc.createElement("class");
//循环产生多个子元素及其子元素
for (int i = 1; i < 5; i++) {
//生成学生元素
Element student = doc.createElement("student");
/***操作student的子元素name***/
//生成学生名称元素
Element name = doc.createElement("name");
//给name元素提供值(元素值作为元素的子元素存在,是一个文本节点)
name.appendChild(doc.createTextNode("aa" + i));
//把name添加到student中,Element接口继承自Node接口
student.appendChild(name);
/***操作student的子元素age***/
//生成age元素
Element age = doc.createElement("age");
//给age元素提供值
age.appendChild(doc.createTextNode("" + i));
//把age添加到student中
student.appendChild(age);
//把student元素添加到根元素
banji.appendChild(student);
}
//把根元素添加到文档上(根元素作为文档的一个子元素存在)
doc.appendChild(banji);
//输出xml文档,先把文档对象强制转换成xml文档
//org.apache.crimson.tree.XmlDocument这个类在Eclipse中默认是不存在的,在JBuilder2005安装目录下的jdk1.4/jre/lib/rt.jar文件中包含这个类
//如果想写xml文件需要手动添加这个包的内容,否则xml文件需要手写
try {
( (org.apache.crimson.tree.XmlDocument) doc).write(new FileWriter(new File("banji1.xml")));
System.out.println("文件创建完成");
}
catch (IOException ex1) {
ex1.printStackTrace();
}
}
catch (ParserConfigurationException ex) {
ex.printStackTrace();
}
}
//读取xml文件
public void read(){
//实例化文档工厂
df = DocumentBuilderFactory.newInstance();
//实例化文档构建器
try {
db = df.newDocumentBuilder();
//由文档构建器获得要读取的xml文件,实例化文档对象
try {
doc = db.parse("banji1.xml");
//xml中,全部由元素,标签组成,根据元素名称获得具体的元素信息
//获得所有student元素的集合
NodeList allStudents = doc.getElementsByTagName("student");
//循环获得具体的student的信息
for(int i=0;i<allStudents.getLength();i++) {
//取得具体的student
Element student = (Element)allStudents.item(i);
//下面这步是重点,JavaScript操作xml文件的方式也是如此,只有方法名上的一点区别
//获得学生姓名( 根据元素名name获得元素集合中的 第一个的 第一个子节点 的值)
String name = student.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
String age = student.getElementsByTagName("age").item(0).getFirstChild().getNodeValue();
System.out.println("学生姓名:"+name+" 学生年龄:"+age);
}
}
catch (IOException ex1) {
ex1.printStackTrace();
}
catch (SAXException ex1) {
ex1.printStackTrace();
}
}
catch (ParserConfigurationException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args){
ExTestXml etx = new ExTestXml();
//先生成xml文件
etx.write();
//读取刚刚生成的xml文件的内容并显示
etx.read();
}
}
生成的xml文件的内容如下:
<?xml version="1.0" encoding="GBK"?>
<class>
<student>
<name>aa1</name>
<age>1</age>
</student>
<student>
<name>aa2</name>
<age>2</age>
</student>
<student>
<name>aa3</name>
<age>3</age>
</student>
<student>
<name>aa4</name>
<age>4</age>
</student>
</class>