DOM 是用与平台和语言无关的方式表示 XML 文档的官方 W3C 标准。DOM 是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的。DOM 以及广义的基于树的处理具有几个优点。首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航,而不是像 SAX 那样是一次性的处理。DOM 使用起来也要简单得多。
先看看怎样来读取XML 创建DOM解析首先我们用创建一个定义工厂 API,使应用程序能够从 XML 文档获取生成 DOM 对象树的解析器-DocumentBuilderFactory 方法: DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance (); 然后运用工厂dbf来定义DocumentBuilder 方法:DocumentBuilder db = dbf.newDocumentBuilder(); 最后DocumentBuilder的parse(String path)来得到Document对象 方法:Document doc = db.parse(“in.xml”); 好了Document对象我们获得了,下面让我们看看怎么处理这个对象 假设in.xml文件内容为: <?xml version="1.0" encoding="utf-8"?> <学生花名册> <学生> <姓名>李丽</姓名> <性别>女</性别> </学生> <学生> <姓名>刘畅</姓名> <性别>男</性别> </学生> </学生花名册>
首先让我们来获取作为xml引用声明指定此文档版本号的属性 方法:doc.getXmlVersion();结果:1.0 然后获取次文档的编码模式 方法:doc.getXmlEncoding();结果:utf-8 获取文档的子节点 方法:Element root = doc.getDocumentElement();结果:返回Element对象-à[<学生花名册>] [<学生花名册>]这个节点中包含了若干个学生对象,怎么来获得他们呢 方法:NodeList students = root.getElememtsByTagName(“学生”);通过这个方法我们可以获取这些节点的有序集合 呵呵!已经到这一步了,下面该怎么办了呢我们需要处理这些学生 下面我们来遍历这个集合吧 for (int i = 0; i < students.getLength(); i++) { Element student = (Element) students.item(i);//遍历集合获取每个学生元素 System.out.println(student.getAttribute("id"));//获取学生的Id System.out.println(student.getElementsByTagName("姓名").item(0).getTextContent());//获取姓名 System.out.println(student.getElementsByTagName("性别").item(0).getTextContent());//获取性别
} |
我们再看看怎样来写XML
首先和前面差不多
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
下面有点小区别因为我们要写一个xml所以我们不能像读取那些用parse(String path);获取Document对象了
Document doc = db.newDocument();//我们要用DocumentBuilder 获取 DOM Document 对象的一个新实例来生成一个 DOM 树。
现在开始创建节点
Element root = document.createElement(“学生花名册”);
doc.appendChild(root);//把这个节点追加到doc文档中
Element student = doc.createElement(“学生”);//创建学生元素节点
Attr id = doc.createAttribute(“id”);//创建Id属性节点
Id.setValue(“1”);//给属性赋值
student.setAttributeNode(id);//把id属性节点追加到student
root.appendChild(student);//追加到root节点
Element name = doc.createElement(“姓名”);//创建姓名元素节点
Text nameValue = doc.createTextNode(“李丽”);//创建文本节点
name.appendChild(nameValue);
student.appendChild(name);
Element sex = doc.createElement(“性别”);//创建姓名元素节点
Text sexValue = doc.createTextNode(“女”);//创建文本节点
name.appendChild(sexValue);
student.appendChild(sex);
文档已经准备完毕了,下面我们把它输出
FileOutputStream out = new FileOutputStream(“out.xml”);//声明一个输出流备用
OutputFormat format = new OutputFormat(doc);//格式化doc
XMLSerializer xmlSerilizer = new XMLSerializer(out, format);
xmlSerilizer.serialize(doc); //序列化文档
好了我们已经得到了out.xml文档了如下:
<?xml version="1.0" encoding="UTF-8"?>
<学生花名册><学生 id="1"><姓名>李丽</姓名><性别>女</性别></学生></学生花名册>