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解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...
Dom方式创建与解析XML文档是一种使用编程语言,如Java,在Android平台实现的方式。这种方式利用了DOM(文档对象模型)的API,其中JAXP(Java API for XML Processing)提供的DocumentBuilder类是用来创建和解析XML...
本教程“XML实用技术教程——顾兵”深入浅出地介绍了XML的基本概念、语法规范以及在实际应用中的技巧。 一、XML基础 1. XML结构:XML文档由元素、属性、文本、注释和处理指令等组成。元素是XML的核心,用于定义...
DOM解析器将整个XML文档加载到内存中,形成一个树形结构,便于随机访问;SAX解析器采用事件驱动的方式,逐行处理XML,占用内存少,适用于大文件;StAX则提供了一个流式接口,允许程序按需读取或写入XML。 此外,...
1. **解析XML文件**:首先,需要加载XML文件并将其解析成DOM4J的Document对象。这可以通过`DocumentBuilder`类实现,通过`read()`方法读取XML文件内容。 2. **定位数据源节点**:XML文件中的数据源配置通常会包含一...
例如,对于DOM解析,可以创建`DOMParser`实例,然后使用`parse()`方法解析XML文档;对于SAX解析,可以实现`ContentHandler`接口,并注册到`SAXParser`中。同时,可以通过`XMLSchemaValidator`进行XML Schema验证。 ...
在给定的“C#——insertDOM”项目中,我们聚焦于一个特定的功能:如何利用C#操作DOM(Document Object Model)来插入TIFF影像图,并计算其坐标和分辨率。下面将详细解释这一过程中的关键知识点。 首先,TIFF...
- **适合解析简单结构的XML**:对于结构复杂、嵌套深度大的XML,Pull解析可能不如DOM或SAX解析直观。 在实际开发中,如Android的布局文件解析、配置文件读取或者从网络获取XML数据时,都可以使用Pull解析器进行处理...
《安卓Android源码解析——XML DOM解析框架》 在安卓Android开发中,XML(eXtensible Markup Language)作为一种标记语言,广泛用于数据交换、配置文件等场景。XML文档对象模型(Document Object Model, DOM)是...
在本主题"Android之PULL解析XML文件——新浪微博客户端首页效果"中,我们将深入探讨如何利用PULL解析器(PullParser)来处理XML数据,从而实现类似新浪微博客户端首页的动态效果。这种效果通常包括新闻标题、摘要、...
010302_XML解析 —— DOM 010303_XML解析 —— SAX 010304_XML解析 —— JDOM 010305_XML解析 —— DOM4J 010306_使用JavaScript操作DOM 010401_Tomcat服务器的安装及配置 020501_注释及Scriptlet 020502_page指令 ...
在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行的、功能强大的开放源代码库。这个库不仅简化了XML处理,还提供了XPath和XSLT的支持,使其成为Java开发者处理XML的首选工具之一。 **...
本项目主要关注的是XML的创建和使用Pull解析器来解析XML,这是Android系统中处理XML数据的一种高效方法。接下来,我们将详细讨论这两个知识点。 首先,XML(Extensible Markup Language)是一种用于标记数据的语言...
本文将深入探讨XML数据在前后台解析的过程中,重点介绍两种主流的Java XML解析库——JDOM和DOM4J,并提供实际运行的程序示例。同时,我们还会讨论如何使用jQuery在前端解析XML并展示数据。 首先,让我们了解XML的...
在这个chm格式的文件“XMLDOM对象方法手册”中,很显然包含了关于XMLDOM核心对象——XMLDocument的所有方法和属性的详尽指南。 XMLDocument对象是XMLDOM的核心,它是整个XML文档的根节点,代表了一个完整的XML文件...
本资料包“安卓Android源码——比较通用的xml解析方法”将深入探讨在Android平台上解析XML的多种方法。 1. DOM解析器(Document Object Model) DOM解析器将整个XML文档加载到内存中,创建一个树形结构,便于遍历和...
《深入解析Android XML DOM解析机制》 XML(Extensible Markup Language)作为一种通用的数据交换格式,在移动开发领域,尤其是在Android系统中扮演着重要角色。本文将深入探讨Android平台下的XML DOM解析机制,...
本篇文章将深入探讨如何使用DOM4J来解析XML文件,以及通过示例代码来展示其基本操作。 首先,我们需要理解DOM4J的工作原理。DOM4J采用的是DOM(Document Object Model)模型,它将整个XML文档加载到内存中形成一棵...
使用Expat解析XML时,通常我们会维护一个状态机,根据接收到的开始和结束元素事件来改变状态,并在适当的时候调用CharacterDataHandler处理文本内容。例如,当我们遇到`<title>`开始标签时,可能进入标题处理状态,...