DOM基础
在开始使用 DOM 之前,了解它实际表示什么是值得的。DOM Document 是以层次结构组织起来的节点,或信息片段,的集合。这种层次结构允许开发者浏览树来查找特定信息。通常,分析结构需要在完成任何工作之前装入整个文档并且装入层次结构。
由于 DOM 是基于信息的层次结构,因此它被称为是基于树的。
对于极其大的文档,装入整个文档并对该文档进行解析会很慢且占用大量资源,所以要用其它方式来处理数据。一些基于事件的模型,如 Simple API for XML(SAX),是工作在数据流之上,在数据流经过时对其进行处理。基于事件的 API 消除了在内存中构建数据树的需要,但它不允许开发者实际更改原始文档中的数据。
另一方面,DOM 还提供了一个 API,该 API 允许开发者为创建应用程序而在树的任何地方添加、编辑、移动或除去节点。
回页首
DOM 基本的节点类型
XML 中最常见的节点类型:
- Node: DOM 基本的数据类型。
- Element: 您将最主要处理的对象是 Element。
- Attr: 代表一个元素的属性。
- Text: 一个 Element 或 Attr 的实际内容。
- Document: 代表整个 XML 文档。一个 Document 对象通常也被称为一棵 DOM 树。
较不常见的节点类型:CData、注释、处理指令和文档片段:
- CData:“字符数据”的缩写
- 注释:注释包含有关数据的信息,通常应用程序会忽略它们。
- 处理指令:PI 是专门针对应用程序的信息。
- 文档片段:为了形成良好的格式,文档只能有一个根元素。有时,必须临时创建几组元素,这些元素不是满足需求所必要的。
文档片段类似于这样:
<item instock="Y" itemid="SA15">
<name>Silver Show Saddle, 16 inch</name>
<price>825.00</price>
<qty>1</qty>
</item>
<item instock="N" itemid="C49">
<name>Premium Cinch</name>
<price>49.00</price>
<qty>1</qty>
</item>
|
回页首
解析文档的三步过程
为了使用 XML 文件中的信息,必须解析该文件以创建 Document 对象。
Document 对象是一个接口,所以不能直接实例化;相反,应用程序一般使用 factory。确切的过程随实现的不同而不同,但想法是相同的。在示例 JAXP 环境中,解析文件是一个三步过程:
- 创建 DocumentBuilderFactory。该对象将创建 DocumentBuilder。
- 创建 DocumentBuilder。 DocumentBuilder 将实际进行解析以创建 Document 对象。
- 解析该文件以创建 Document 对象。
如果需要,在不必更改代码的情况下,JAXP 允许插进不同的解析器。让我们继续,开始构建应用程序。
回页首
基本的应用程序
从创建基本的应用程序,名为 OrderProcessor 的类开始。
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import org.w3c.dom.Document;
public class OrderProcessor {
public static void main (String args[]) {
File docFile = new File("orders.xml");
Document doc = null;
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(docFile);
} catch (Exception e) {
System.out.print("Problem parsing the file.");
}
}
}
|
首先,Java 导入必要的类,然后创建 OrderProcessor 应用程序。在本教程中的这个示例将只处理一个文件,所以为简短起见,该应用程序包含对它的直接引用。
应用程序在 try-catch 块外部定义了 Document 对象,以便在后面使用该对象。try-catch 使您能执行可能会抛出异常的一些操作,这样不会危及整个应用程序。如果异常抛出,则应用程序简单地执行相应的 catch 代码。
在 try-catch 块内部,应用程序创建 DocumentBuilderFactory,然后使用它来创建 DocumentBuilder。最后,DocumentBuilder 解析该文件以创建 Document。
回页首
DOM 常用方法
- Document.getDocumentElement()
返回文档的根(root)元素。
- Node.getFirstChild() and Node.getLastChild()
返回给定 Node 的第一个子女。
- Node.getNextSibling() and Node.getPreviousSibling()
这些方法返回下一个或前一个给定 Node 的同胞。
- Node.getAttribute(attrName)
对给定的 Node,返回给定名称的属性。例如,如果您要获得名为 id 属性的对象,可调用 getAttribute("id")。
回页首
编辑文档
- 更改节点数据
Node.setNodeValue(elemValue);
|
- 添加节点
String totalString = new Double(total).toString();
Node totalNode = doc.createTextNode(totalString);
//Document 对象创建新的文本节点,该节点带有作为值的 totalString
Element totalElement = doc.createElement("total");
//创建新元素 total
totalElement.appendChild(totalNode);
// 将节点添加到新的 total 元素。
thisOrder.insertBefore(totalElement, thisOrder.getFirstChild());
//将新元素添加到 Document,指定新的 Node,然后指定新 Node 在 Node 之前
|
- 除去节点
Node deadNode = thisOrderItem.getParentNode().removeChild(thisOrderItem);
|
- 替换节点
Element backElement = doc.createElement("backordered");
//创建新元素 backordered
Node deadNode =
thisOrderItem.getParentNode().replaceChild(backElement,thisOrderItem);
|
- 创建和设置属性
Element backElement = doc.createElement("backordered");
//创建新元素 backordered
backElement.setAttributeNode(doc.createAttribute("itemid"));
//创建新属性 itemid
String itemIdString = thisOrderItem.getAttributeNode("itemid").getNodeValue();
//取得thisOrderItem的属性itemid的值
backElement.setAttribute("itemid", itemIdString);
//设置backElement的属性item的值,可以省略createAttribute
Node deadNode =
thisOrderItem.getParentNode().replaceChild(backElement,thisOrderItem);
|
- 除去属性
Element thisOrder = (Element)orders.item(orderNum);
Element customer = (Element)thisOrder.getElementsByTagName("cusomertid").item(0);
customer.removeAttribute("limit");
//去除属性limit
|
分享到:
相关推荐
java程序中使用dom解析xml文件介绍
java学习笔记——使用DOM解析XML和使用SAX解析XML
010302_XML解析 —— DOM 010303_XML解析 —— SAX 010304_XML解析 —— JDOM 010305_XML解析 —— DOM4J 010306_使用JavaScript操作DOM 010401_Tomcat服务器的安装及配置 020501_注释及Scriptlet 020502_page指令 ...
学习xml——sax解析的项目小示例 非常简单易懂 而且包括多种sax解析的方法 如xmlReader,saxBuilder工厂,还包括一个dom解析的示例(DocumentBuilder工厂)
本篇文章主要介绍了Android创建与解析XML(二)——详解Dom4j方式,这里整理了详细的代码,有需要的小伙伴可以参考下。
本篇文章主要介绍了Android创建与解析XML(二)——详解Dom方式 ,这里整理了详细的代码,有需要的小伙伴可以参考下。
adroid解析XML三种方式——源码分析,DOM,SAX,Pull,
xml入门小项目——通讯录系统 系统特点: 1、系统主程序入口MainProgram.java ...系统xml文档通过dom4j技术创建和解析。 3、涉及JavaSE中的集合、泛型、接口文件及其实现类的应用等。 4、涉及junit测试方法的使用
工具内容包括java程序开发中文件配置解析需要实用的jar包工具——[dom4j-1.6.1.jar]&[jaxen-1.1-beta-6.jar]
dom4j是sourceforge.net上的一个开源项目,主要用于对XML的解析。
XML概述 <br>2.1 XML的概念 2.1.1 XML元素 2.1.2 XML属性 2.1.3 XML解析器 2.1.4 构建XML 2.1.5 XML文档的各个组成部分 2.2 创建格式良好的XML文档 2.2.1 XML中的元素 2.2.2 XML中的属性...
简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。 XML的意思是“可扩展标记语言“(eXtensible Markup Language)。它允许你创建你自己的文档标记。在为浏览器标记文档...
DOM解析 逐行扫描XML文件,读取文件的同时即可进行解析处理,不必等到文件加载结束。缺点是无法进行增、删、改等操作。 SAX解析 一个开源的Java项目,既可以用于Android应用,也可以用于JavaEE程序。Android中已经...
范 例 xmlDocument ————————————————————————————- AppendChild 方法 作 用 加上一个节点当作指定节点最后的子节点。 基本语法 xmlDocumentNode.appendChild(newChild); 说 明 new...
XML4C 和 XML4J 是两个并列的项目,而 XML4J 是 Xerces-J——Java 实现——的前身。IBM 将这两个项目的源代码让与 Apache 软件基金会(Apache Software Foundation),他们将其分别改名为 Xerces-C++ 和 Xerces-J。注...
本文实例讲述了PHP基于DOM创建xml文档的方法。分享给大家供大家参考,具体如下: ...1、创建DOM对象 ——》2、创建节点——》3、创建下级节点——》4、将下级节点加入到上级节点中——》5、创建属性节
一、IE中的XML DOM支持 IE对XML的支持是基于ActiveX的MSXML库。 1、DOM创建 对每个新版本的MSXML,都会创建出不同的XML DOM对象,所以尽量选择新的XML DOM版本。...readyState共有五种可能的值: 0——DOM尚未
既然大胆假设了一把,那么就来小心求证一下:首先,用xsl来实现解析一级xml很容易搞定,使用xsl:for-each遍历生成子菜单,并且,如果子菜单中还有子xml数据,将这些子xml数据存在子菜单对应的数据岛中,以备后面处理...