一.概述
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文档源码。比较全 1.DOM生成和解析XML文档 2.SAX生成和解析XML文档 3.DOM4J生成和解析XML文档 4.JDOM生成和解析XML
DOM是W3C推荐的一种XML解析标准,它将整个XML文档加载到内存中,形成一棵树形结构,称为DOM树。通过DOM,我们可以方便地访问和修改XML文档的任何部分。 1. 创建XML文档的基本步骤: - 导入必要的Java API:如`...
2. 解析XML文档:使用`DocumentFactory`创建`Document`,然后使用`read()`方法解析XML文件。 ```java DocumentFactory factory = DocumentFactory.getInstance(); Document document = factory.createDocument(); ...
Java解析XML文档时,通常有两种主要的方法:SAX(Simple API for XML)和DOM(Document Object Model)。本文主要聚焦于DOM解析方式。DOM是一种基于树形结构的API,它允许开发人员将整个XML文档加载到内存中,形成一...
Java提供了多种解析XML的API,包括SAX(Simple API for XML)、DOM(Document Object Model)以及DOM4J。下面我们将详细探讨这些解析方式及其在实际开发中的应用。 1. SAX解析器: SAX是一种基于事件驱动的解析器,...
Java解析XML配置文件是开发过程中常见的一项任务,特别是在基于Java的框架中,如Spring,大量使用XML文件来存储配置信息。DOM4J是Java中一个非常流行且功能强大的XML处理库,它提供了丰富的API用于读取、写入、修改...
### Java解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...
Java解析XML时,dom4j是一个非常流行的库,它提供了灵活且强大的API来处理XML文档。dom4j-1.6.1.jar是这个库的一个版本,发布于2005年,它支持XML的读取、写入、操作以及查询功能。在本文中,我们将深入探讨dom4j的...
Java解析XML文档是Java开发中常见的任务,XML(Extensible Markup Language)作为一种可扩展标记语言,广泛用于数据交换、配置存储等场景。本项目涵盖了三种主流的Java XML解析方法:SAX、DOM以及DOM4J,并提供了...
DOM解析器将整个XML文档加载到内存中,形成一个树形结构,允许开发者通过节点遍历访问XML数据。这种方法的优点是操作方便,但缺点是对内存消耗大,不适用于处理大型XML文件。 2. SAX(简单API for XML)解析: 与...
Java DOM 解析 XML 实例是 Java 语言中常用的 XML 解析方法之一,使用 W3C 推荐的文档对象模型(Document Object Model,DOM)来解析 XML 文档。DOM 提供了一个树形结构的对象模型,通过遍历树形结构可以访问和操作 ...
Java XML文件操作类:Dom4jHelper源代码文件下载,实现的功能:解析url xml文档,遍历解析文档,遍历解析元素,解析文件,获得根元素,修改xml某节点的值,输出文件路径及文件名 如果输出文件为null,则默认为原xml文件,...
DOM4j是一个灵活且功能强大的Java XML API,它提供了全面的XML处理解决方案,包括读取、写入、操作和转换XML文档。DOM4j的核心特性是基于DOM模型,但同时融入了SAX和DOM的优点,使其在处理大型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(eXtensible Markup Language)作为一种结构化数据存储格式,被广泛用于数据交换、配置文件和Web服务等场景。本篇文章将详细探讨Java如何利用DOM4J库来解析XML文件...
Java作为一种广泛使用的后端编程语言,提供了多种方式来解析XML文档,使得处理多级嵌套的数据变得可能。本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:...
Java XML解析是开发过程中常见的一项任务,用于读取、修改或操作XML文档。在这个场景中,我们关注的是使用DOM4J库进行XML处理。DOM4J是一个强大的Java库,它提供了丰富的API来处理XML,包括读取、写入、修改以及...
"java解析xml文档的常用方法" Java 解析 XML 文档的常用方法有四种:DOM、SAX、JDOM 和 DOM4J。下面对这四种方法进行详细的介绍: 1. 使用 DOM(JAXP Crimson 解析器) DOM(Document Object Model)是一种以层次...