`
suky
  • 浏览: 146959 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

Java解析XML文档(一):DOM

    博客分类:
  • J2ME
阅读更多

一.概述
DOM (Document Object Module),基于树和节点的文档对象类型。
在实际的项目中,曾遇到需要处理很大的xml文件,大概200多M,加载XML文件时,会报内存溢出java.lang.OutOfMemoryError ,那就需要sax解析了。

二.DOM编程

1.使用到的包(不需要导入其它包,JDK自带的):

org.w3c.dom :为文档对象模型 (DOM) 提供接口
javax.xml.parsers:解析器工厂工具

例如:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

2.解析流程
首先实例化一个文档解析器工厂,从此工厂中获取一个文档解析器,解析器解析XML文件转化后的输入流,从而构建一个文档org.w3c.dom.Document实例。接着利用API,对Document对象进行相应的操作即可。

3实例代码

(1)XML文件:plan.xml


<?xml version="1.0" encoding="ISO-8859-1"?>

<plan-info>

<plan category="PPO">
  <carrier-id>10001</carrier-id>
  <name>PPO 1</name>
  <year>2005</year>
  <rate>30.00</rate>
</plan>

<plan category="POS">
  <carrier-id>20001</carrier-id>
  <name>POS 1</name>
  <co-pay>20</co-pay>
  <rate>29.99</rate>
</plan>

<plan category="HMO">
  <carrier-id>30001</carrier-id>
  <name>HMO 1</name>
  <co-pay>10</co-pay>
  <rate>49.99</rate>
</plan>

<plan category="EPO">
	<carrier-id>40001</carrier-id>
  <name>EPO 1</name>
  <co-pay>0</co-pay>
  <rate>39.95</rate>
</plan>

</plan-info>


 


(2)解析代码


import java.io.File;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ParseXMLByDOM {

	public static void main(String[] args) {
		File file = new File("plan.xml");
		if (!file.exists()) {
			System.out.println("File is not found!");
			return;
		}

		DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder builder = fac.newDocumentBuilder();

			// InputStream is = new FileInputStream("plan.xml");
			System.out.println("File name:" + file.getName());
			Document doc = builder.parse(file);
                        // 或 builder.parse(is)

			Element root = doc.getDocumentElement();
			System.out.println("root name:" + root.getTagName());
			NodeList nodeList = doc.getElementsByTagName("plan");
			System.out.println("nodeList length:" + nodeList.getLength());

			Node fNodes = nodeList.item(0);
			System.out.println("father name:" + fNodes.getNodeName());

			NamedNodeMap attrs = fNodes.getAttributes();// 父节点的所有属性
			for (int i = 0; i < attrs.getLength(); i++) {
				Node attribute = attrs.item(i);
				System.out.println("father key:" + attribute.getNodeName()
						+ ",value:" + attribute.getNodeValue());
			}

			NodeList cNodes = fNodes.getChildNodes();
			System.out.println("childList length:" + cNodes.getLength());// 输出9,下面分析1
			for (int j = 0; j < cNodes.getLength(); j++) {
				Node cNode = cNodes.item(j);

				if (Node.ELEMENT_NODE == cNode.getNodeType()) {
					System.out.println("child key:" + cNode.getNodeName()
							+ ",value:" + cNode.getFirstChild().getNodeValue());
					

				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}



 

输出:

File name:plan.xml
root name:plan-info
nodeList length:4
father name:plan
father key:category,value:PPO
childList length:9
child key:carrier-id,value:10001
child key:name,value:PPO 1
child key:year,value:2005
child key:rate,value:30.00


(3)代码分析


1)在DOM解析时会将每个回车都视为 1个节点的子节点,所以cNodes有9个节点,其中多了5个回车。


2)判断节点类型:if (Node.ELEMENT_NODE == cNode.getNodeType()) ,也可以使用cNode instanceof Element 。


3)节点的属性也是它的子节点,所以节点取值cNode.getFirstChild().getNodeValue(),而不是cNode.getNodeValue() 。


分享到:
评论

相关推荐

    JAVA 解析XML生成XML文档实例

    JAVA 解析XML和生成XML文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML

    Java创建xml文档笔记(DOM,DOM4J)

    DOM是W3C推荐的一种XML解析标准,它将整个XML文档加载到内存中,形成一棵树形结构,称为DOM树。通过DOM,我们可以方便地访问和修改XML文档的任何部分。 1. 创建XML文档的基本步骤: - 导入必要的Java API:如`...

    Java解析XML文档(DOM与DOM4j两种方式)

    2. 解析XML文档:使用`DocumentFactory`创建`Document`,然后使用`read()`方法解析XML文件。 ```java DocumentFactory factory = DocumentFactory.getInstance(); Document document = factory.createDocument(); ...

    Java解析XML文档—使用DOM解析.doc

    Java解析XML文档时,通常有两种主要的方法:SAX(Simple API for XML)和DOM(Document Object Model)。本文主要聚焦于DOM解析方式。DOM是一种基于树形结构的API,它允许开发人员将整个XML文档加载到内存中,形成一...

    Java使用sax、dom、dom4j解析xml文档

    Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...

    Java解析xml配置文件,DOM4J解析xml配置文件,提供使用文档和源码下载

    Java解析XML配置文件是开发过程中常见的一项任务,特别是在基于Java的框架中,如Spring,大量使用XML文件来存储配置信息。DOM4J是Java中一个非常流行且功能强大的XML处理库,它提供了丰富的API用于读取、写入、修改...

    java解析xml——dom

    ### Java解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...

    java解析XML dom4j dom4j-1.6.1.jar

    Java解析XML时,dom4j是一个非常流行的库,它提供了灵活且强大的API来处理XML文档。dom4j-1.6.1.jar是这个库的一个版本,发布于2005年,它支持XML的读取、写入、操作以及查询功能。在本文中,我们将深入探讨dom4j的...

    Java 解析xml文档

    Java解析XML文档是Java开发中常见的任务,XML(Extensible Markup Language)作为一种可扩展标记语言,广泛用于数据交换、配置存储等场景。本项目涵盖了三种主流的Java XML解析方法:SAX、DOM以及DOM4J,并提供了...

    java 解析XML性能对比分析Demo

    DOM解析器将整个XML文档加载到内存中,形成一个树形结构,允许开发者通过节点遍历访问XML数据。这种方法的优点是操作方便,但缺点是对内存消耗大,不适用于处理大型XML文件。 2. SAX(简单API for XML)解析: 与...

    java dom 解析 xml 实例

    Java DOM 解析 XML 实例是 Java 语言中常用的 XML 解析方法之一,使用 W3C 推荐的文档对象模型(Document Object Model,DOM)来解析 XML 文档。DOM 提供了一个树形结构的对象模型,通过遍历树形结构可以访问和操作 ...

    Java XML文件操作类:Dom4jHelper源文件下载.rar

    Java XML文件操作类:Dom4jHelper源代码文件下载,实现的功能:解析url xml文档,遍历解析文档,遍历解析元素,解析文件,获得根元素,修改xml某节点的值,输出文件路径及文件名 如果输出文件为null,则默认为原xml文件,...

    JAVA 解析XML 的JAr包 DOM4j.Jar JDOM.jar

    DOM4j是一个灵活且功能强大的Java XML API,它提供了全面的XML处理解决方案,包括读取、写入、操作和转换XML文档。DOM4j的核心特性是基于DOM模型,但同时融入了SAX和DOM的优点,使其在处理大型XML文件时具有更好的...

    DOM_XML.rar_DOM_dom xml_dom xml java_dom解析xml_java解析xml

    标题中的"DOM_XML.rar"可能是一个包含DOM解析XML相关示例的压缩文件,"DOM_dom xml_dom xml java_dom解析xml_java解析xml"这部分描述了文件的主要内容,即关于DOM(Document Object Model)在XML解析中的应用,特别...

    java解析XML文件

    Java解析XML文件是Java开发中常见的一项任务,XML(eXtensible Markup Language)作为一种结构化数据存储格式,被广泛用于数据交换、配置文件和Web服务等场景。本篇文章将详细探讨Java如何利用DOM4J库来解析XML文件...

    java 解析xml 多级

    Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:...

    java 解析xml所需要的dom4j包

    Java XML解析是开发过程中常见的一项任务,用于读取、修改或操作XML文档。在这个场景中,我们关注的是使用DOM4J库进行XML处理。DOM4J是一个强大的Java库,它提供了丰富的API来处理XML,包括读取、写入、修改以及...

    java解析xml文档的常用方法

    "java解析xml文档的常用方法" Java 解析 XML 文档的常用方法有四种:DOM、SAX、JDOM 和 DOM4J。下面对这四种方法进行详细的介绍: 1. 使用 DOM(JAXP Crimson 解析器) DOM(Document Object Model)是一种以层次...

Global site tag (gtag.js) - Google Analytics