`
躁动的绵羊
  • 浏览: 95946 次
  • 性别: 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解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...

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

    Dom方式创建与解析XML文档是一种使用编程语言,如Java,在Android平台实现的方式。这种方式利用了DOM(文档对象模型)的API,其中JAXP(Java API for XML Processing)提供的DocumentBuilder类是用来创建和解析XML...

    xml实用技术教程—— 顾兵

    本教程“XML实用技术教程——顾兵”深入浅出地介绍了XML的基本概念、语法规范以及在实际应用中的技巧。 一、XML基础 1. XML结构:XML文档由元素、属性、文本、注释和处理指令等组成。元素是XML的核心,用于定义...

    xml——————表单资源

    DOM解析器将整个XML文档加载到内存中,形成一个树形结构,便于随机访问;SAX解析器采用事件驱动的方式,逐行处理XML,占用内存少,适用于大文件;StAX则提供了一个流式接口,允许程序按需读取或写入XML。 此外,...

    dom4j实战(一)——使用dom4j从XML中读取数据源配置

    1. **解析XML文件**:首先,需要加载XML文件并将其解析成DOM4J的Document对象。这可以通过`DocumentBuilder`类实现,通过`read()`方法读取XML文件内容。 2. **定位数据源节点**:XML文件中的数据源配置通常会包含一...

    XML解析器————

    例如,对于DOM解析,可以创建`DOMParser`实例,然后使用`parse()`方法解析XML文档;对于SAX解析,可以实现`ContentHandler`接口,并注册到`SAXParser`中。同时,可以通过`XMLSchemaValidator`进行XML Schema验证。 ...

    C#——insertDOM

    在给定的“C#——insertDOM”项目中,我们聚焦于一个特定的功能:如何利用C#操作DOM(Document Object Model)来插入TIFF影像图,并计算其坐标和分辨率。下面将详细解释这一过程中的关键知识点。 首先,TIFF...

    Android XML解析—— Pull解析XML(待完善)

    - **适合解析简单结构的XML**:对于结构复杂、嵌套深度大的XML,Pull解析可能不如DOM或SAX解析直观。 在实际开发中,如Android的布局文件解析、配置文件读取或者从网络获取XML数据时,都可以使用Pull解析器进行处理...

    安卓Android源码——xml-dom201311060201.zip

    《安卓Android源码解析——XML DOM解析框架》 在安卓Android开发中,XML(eXtensible Markup Language)作为一种标记语言,广泛用于数据交换、配置文件等场景。XML文档对象模型(Document Object Model, DOM)是...

    Android之PULL解析XML文件——新浪微博客户端首页效果

    在本主题"Android之PULL解析XML文件——新浪微博客户端首页效果"中,我们将深入探讨如何利用PULL解析器(PullParser)来处理XML数据,从而实现类似新浪微博客户端首页的动态效果。这种效果通常包括新闻标题、摘要、...

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

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

    dom4j---xml解析jar包

    在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行的、功能强大的开放源代码库。这个库不仅简化了XML处理,还提供了XPath和XSLT的支持,使其成为Java开发者处理XML的首选工具之一。 **...

    android开发之xml文件操作——xml创建和pull解析xml

    本项目主要关注的是XML的创建和使用Pull解析器来解析XML,这是Android系统中处理XML数据的一种高效方法。接下来,我们将详细讨论这两个知识点。 首先,XML(Extensible Markup Language)是一种用于标记数据的语言...

    xml数据前后台解析:jdom与dom4j源码,程序可以跑

    本文将深入探讨XML数据在前后台解析的过程中,重点介绍两种主流的Java XML解析库——JDOM和DOM4J,并提供实际运行的程序示例。同时,我们还会讨论如何使用jQuery在前端解析XML并展示数据。 首先,让我们了解XML的...

    xmldom

    在这个chm格式的文件“XMLDOM对象方法手册”中,很显然包含了关于XMLDOM核心对象——XMLDocument的所有方法和属性的详尽指南。 XMLDocument对象是XMLDOM的核心,它是整个XML文档的根节点,代表了一个完整的XML文件...

    安卓Android源码——比较通用的xml解析方法.rar

    本资料包“安卓Android源码——比较通用的xml解析方法”将深入探讨在Android平台上解析XML的多种方法。 1. DOM解析器(Document Object Model) DOM解析器将整个XML文档加载到内存中,创建一个树形结构,便于遍历和...

    安卓Android源码——xml-dom201311060201.rar

    《深入解析Android XML DOM解析机制》 XML(Extensible Markup Language)作为一种通用的数据交换格式,在移动开发领域,尤其是在Android系统中扮演着重要角色。本文将深入探讨Android平台下的XML DOM解析机制,...

    用dom4j解析xml文件

    本篇文章将深入探讨如何使用DOM4J来解析XML文件,以及通过示例代码来展示其基本操作。 首先,我们需要理解DOM4J的工作原理。DOM4J采用的是DOM(Document Object Model)模型,它将整个XML文档加载到内存中形成一棵...

    XML函数——expat

    使用Expat解析XML时,通常我们会维护一个状态机,根据接收到的开始和结束元素事件来改变状态,并在适当的时候调用CharacterDataHandler处理文本内容。例如,当我们遇到`&lt;title&gt;`开始标签时,可能进入标题处理状态,...

Global site tag (gtag.js) - Google Analytics