`
躁动的绵羊
  • 浏览: 94335 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XML教程——采用DOM来解析XML

阅读更多

DOM基础

在开始使用 DOM 之前,了解它实际表示什么是值得的。DOM Document 是以层次结构组织起来的节点,或信息片段,的集合。这种层次结构允许开发者浏览树来查找特定信息。通常,分析结构需要在完成任何工作之前装入整个文档并且装入层次结构。

由于 DOM 是基于信息的层次结构,因此它被称为是基于树的。

对于极其大的文档,装入整个文档并对该文档进行解析会很慢且占用大量资源,所以要用其它方式来处理数据。一些基于事件的模型,如 Simple API for XML(SAX),是工作在数据流之上,在数据流经过时对其进行处理。基于事件的 API 消除了在内存中构建数据树的需要,但它不允许开发者实际更改原始文档中的数据。

另一方面,DOM 还提供了一个 API,该 API 允许开发者为创建应用程序而在树的任何地方添加、编辑、移动或除去节点。


DOM 基本的节点类型

XML 中最常见的节点类型:

  1. Node: DOM 基本的数据类型。
  2. Element: 您将最主要处理的对象是 Element。
  3. Attr: 代表一个元素的属性。
  4. Text: 一个 Element 或 Attr 的实际内容。
  5. 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 环境中,解析文件是一个三步过程:

  1. 创建 DocumentBuilderFactory。该对象将创建 DocumentBuilder。
  2. 创建 DocumentBuilder。 DocumentBuilder 将实际进行解析以创建 Document 对象。
  3. 解析该文件以创建 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 常用方法

  1. Document.getDocumentElement()
    返回文档的根(root)元素。
  2. Node.getFirstChild() and Node.getLastChild()
    返回给定 Node 的第一个子女。
  3. Node.getNextSibling() and Node.getPreviousSibling()
    这些方法返回下一个或前一个给定 Node 的同胞。
  4. Node.getAttribute(attrName)
    对给定的 Node,返回给定名称的属性。例如,如果您要获得名为 id 属性的对象,可调用 getAttribute("id")。

编辑文档

  1. 更改节点数据
    Node.setNodeValue(elemValue);
    	

  2. 添加节点
    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 之前
    	

  3. 除去节点
    Node deadNode = thisOrderItem.getParentNode().removeChild(thisOrderItem);
    	

  4. 替换节点
    Element backElement = doc.createElement("backordered");	
    //创建新元素 backordered
    
    Node deadNode = 
    thisOrderItem.getParentNode().replaceChild(backElement,thisOrderItem);
    	

  5. 创建和设置属性
    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);
    	

  6. 除去属性
    Element thisOrder = (Element)orders.item(orderNum);
    Element customer = (Element)thisOrder.getElementsByTagName("cusomertid").item(0);
    customer.removeAttribute("limit");
    //去除属性limit
    
分享到:
评论

相关推荐

    java解析xml——dom

    java程序中使用dom解析xml文件介绍

    使用DOM解析XML和使用SAX解析XML

    java学习笔记——使用DOM解析XML和使用SAX解析XML

    Java Web 开发实战经典(基础篇)

    010302_XML解析 —— DOM 010303_XML解析 —— SAX 010304_XML解析 —— JDOM 010305_XML解析 —— DOM4J 010306_使用JavaScript操作DOM 010401_Tomcat服务器的安装及配置 020501_注释及Scriptlet 020502_page指令 ...

    XML——sax解析 极速入门易懂示例

    学习xml——sax解析的项目小示例 非常简单易懂 而且包括多种sax解析的方法 如xmlReader,saxBuilder工厂,还包括一个dom解析的示例(DocumentBuilder工厂)

    Android 创建与解析XML(五)——详解Dom4j方式

    本篇文章主要介绍了Android创建与解析XML(二)——详解Dom4j方式,这里整理了详细的代码,有需要的小伙伴可以参考下。

    Android创建与解析XML(二)——详解Dom方式

    本篇文章主要介绍了Android创建与解析XML(二)——详解Dom方式 ,这里整理了详细的代码,有需要的小伙伴可以参考下。

    adroid解析XML三种方式——源码分析

    adroid解析XML三种方式——源码分析,DOM,SAX,Pull,

    xml入门项目——通讯录系统

    xml入门小项目——通讯录系统 系统特点: 1、系统主程序入口MainProgram.java ...系统xml文档通过dom4j技术创建和解析。 3、涉及JavaSE中的集合、泛型、接口文件及其实现类的应用等。 4、涉及junit测试方法的使用

    XML文档解析相关工具

    工具内容包括java程序开发中文件配置解析需要实用的jar包工具——[dom4j-1.6.1.jar]&[jaxen-1.1-beta-6.jar]

    java工具类——dom4j

    dom4j是sourceforge.net上的一个开源项目,主要用于对XML的解析。

    C#XML入门经典 C#编程人员必备的XML技能.part2

    XML概述 &lt;br&gt;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 源代码(VC6 & VS2005)

    简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。 XML的意思是“可扩展标记语言“(eXtensible Markup Language)。它允许你创建你自己的文档标记。在为浏览器标记文档...

    Android程序技术:个人学习助手项目习题详情显示.pptx

    DOM解析 逐行扫描XML文件,读取文件的同时即可进行解析处理,不必等到文件加载结束。缺点是无法进行增、删、改等操作。 SAX解析 一个开源的Java项目,既可以用于Android应用,也可以用于JavaEE程序。Android中已经...

    比较详细的XMLDOM对象方法详解第1/2页

    范 例 xmlDocument ————————————————————————————- AppendChild 方法 作 用 加上一个节点当作指定节点最后的子节点。 基本语法 xmlDocumentNode.appendChild(newChild); 说 明 new...

    xerces-c++-3.1.3

    XML4C 和 XML4J 是两个并列的项目,而 XML4J 是 Xerces-J——Java 实现——的前身。IBM 将这两个项目的源代码让与 Apache 软件基金会(Apache Software Foundation),他们将其分别改名为 Xerces-C++ 和 Xerces-J。注...

    PHP基于DOM创建xml文档的方法示例

    本文实例讲述了PHP基于DOM创建xml文档的方法。分享给大家供大家参考,具体如下: ...1、创建DOM对象 ——》2、创建节点——》3、创建下级节点——》4、将下级节点加入到上级节点中——》5、创建属性节

    JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML

    一、IE中的XML DOM支持 IE对XML的支持是基于ActiveX的MSXML库。 1、DOM创建 对每个新版本的MSXML,都会创建出不同的XML DOM对象,所以尽量选择新的XML DOM版本。...readyState共有五种可能的值: 0——DOM尚未

    无限菜单之 xml+popup 版(IE5.5+)

    既然大胆假设了一把,那么就来小心求证一下:首先,用xsl来实现解析一级xml很容易搞定,使用xsl:for-each遍历生成子菜单,并且,如果子菜单中还有子xml数据,将这些子xml数据存在子菜单对应的数据岛中,以备后面处理...

Global site tag (gtag.js) - Google Analytics