`

用 DOM 读取一个 XML 文档(一)

阅读更多
用 DOM 读取 XML 文档时,不需要任何的第三方jar包,并且DOM是HTML与XML的应用编程接口(API),也就是说用 DOM 只能读取 HTML和 XML 两种格式的文件,DOM是官方制定的规范。

<!-- XML 文档 -->
<?xml version="1.0"?>
<PEOPLE>
	<PERSON PERSONID="E01">
		<NAME>Tony Blair</NAME>
		<ADDRESS>10 Downing Street, London, UK</ADDRESS>
		<TEL>(061) 98765</TEL>
		<FAX>(061) 98765</FAX>
		<EMAIL>blair@everywhere.com</EMAIL>
	</PERSON>
	<PERSON PERSONID="E02">
		<NAME>Bill Clinton</NAME>
		<ADDRESS>White House, USA</ADDRESS>
		<TEL>(001) 6400 98765</TEL>
		<FAX>(001) 6400 98765</FAX>
		<EMAIL>bill@everywhere.com</EMAIL>
	</PERSON>
	<PERSON PERSONID="E03">
		<NAME>Tom Cruise</NAME>
		<ADDRESS>57 Jumbo Street, New York, USA</ADDRESS>
		<TEL>(001) 4500 67859</TEL>
		<FAX>(001) 4500 67859</FAX>
		<EMAIL>cruise@everywhere.com</EMAIL>
	</PERSON>
	<PERSON PERSONID="E04">
		<NAME>Linda Goodman</NAME>
		<ADDRESS>78 Crax Lane, London, UK</ADDRESS>
		<TEL>(061) 54 56789</TEL>
		<FAX>(061) 54 56789</FAX>
		<EMAIL>linda@everywhere.com</EMAIL>
	</PERSON>
</PEOPLE>




package com.syh.xml.dom;

import java.io.File;


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

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

public class DomTest1 {

	public static void main(String[] args) throws Exception {
		
		//step 1 : 获得 dom 解析器工厂(工厂的作用是用于创建具体的解析器)
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance() ;
		
		//step 2 : 获得具体的 DOM 解析器
		DocumentBuilder db = dbf.newDocumentBuilder() ;
		
		//step 3 : 解析一个 xml 文档,获得 Docuement 对象(根节点)---这个相当于拿到了进入XML文档的入口
		Document document = db.parse(new File("candidate.xml")) ;
		
		//step 4 : 根据标签名字获得节点列表 , 这里获得了根元素节点
		//getElementsByTagName() 这个方法是不能跨层取值的,
		//比如说: <NAME> 是  <PERSON>( PERSON 是根元素节点) 的一个子元素,在用这个方法的时候,我们要取得 <NAME> 的文本信息,
		//不能在事先没有实现调用 getElementsByTagName("PERSON") 的情况下, 调用 getElementsByTagName("NAME")
		//这是为什么呢? 因为 DOM 是用树的模型访问 XML 文档的,如果直接调用 getElementsByTagName("NAME"),就会认为 <NAME> 是根元素节点!
		NodeList list = document.getElementsByTagName("PERSON") ;
		
		//System.out.println(list.getLength());
		for (int i = 0 ; i < list.getLength() ; i ++) {
			
			//这是拿到了一个具体的 Element 对象了,针对于这个文档,这时定位到了<PERSON>
			Element ele = (Element) list.item(i) ;
			
			//这时定位到了<PERSON>元素中的<NAME>子元素<——ele.getElementsByTagName("NAME").item(0) 通过这个方法
			//这时定位到了<name>元素的第一个“孩子”,也就是<name>元素中的第一个子元素 <——ele.getElementsByTagName("NAME").item(0).getFirstChild()
			//为什么要在调用 ele.getElementsByTagName("NAME").item(0) 方法后还要调用 getFirstChild() 方法呢?
			//直接调用 getNodeValue()这个方法返回一个文本信息(这个方法返回 String )不就可以了吗? 而且 <NAME> 元素中也没有子元素啊!这是为什么呢?
			//<NAME>Tony Blair</NAME> 在W3C制定规范中也把 <NAME>元素中的文本信息也当成一个子元素了!可是文本信息没有什么TagName(标签名)啊!也就是说文本信息怎么会有子元素呢?
			//所以就调用了 getFirstChild() 这个方法, 将 Tony Blair 当成了这个文本信息的第一个“孩子”,也就是第一个元素
			String content = ele.getElementsByTagName("NAME").item(0).getFirstChild().getNodeValue() ;
			
			System.out.println("name : " + content);
			
			//获取<ADDRESS>的文本信息
			content = ele.getElementsByTagName("ADDRESS").item(0).getFirstChild().getNodeValue() ;
			
			System.out.println("address : " + content);
			
			//获取<TEL>的文本信息
			content = ele.getElementsByTagName("TEL").item(0).getFirstChild().getNodeValue() ;
			
			System.out.println("tel : " + content);

			//获取<FAX>的文本信息
			content = ele.getElementsByTagName("FAX").item(0).getFirstChild().getNodeValue() ;
			
			System.out.println("fax : " + content);
			
			//获取<EMAIL>的文本信息
			content = ele.getElementsByTagName("EMAIL").item(0).getFirstChild().getNodeValue() ;
			
			System.out.println("email : " + content);
			
			System.out.println("---------------------------------------");
			
		}
		
	}
}




下面是在控制台出现的结果:

name : Tony Blair
address : 10 Downing Street, London, UK
tel : (061) 98765
fax : (061) 98765
email : blair@everywhere.com
---------------------------------------
name : Bill Clinton
address : White House, USA
tel : (001) 6400 98765
fax : (001) 6400 98765
email : bill@everywhere.com
---------------------------------------
name : Tom Cruise
address : 57 Jumbo Street, New York, USA
tel : (001) 4500 67859
fax : (001) 4500 67859
email : cruise@everywhere.com
---------------------------------------
name : Linda Goodman
address : 78 Crax Lane, London, UK
tel : (061) 54 56789
fax : (061) 54 56789
email : linda@everywhere.com
---------------------------------------
分享到:
评论

相关推荐

    dom4j读写xml文档实例

    要使用DOM4J读取XML文档,首先需要创建一个`SAXReader`对象,然后调用`read`方法传入XML文件路径。这将返回一个`Document`对象,我们可以从中获取所有元素信息。 ```java File file = new File("path_to_xml_file")...

    QT下DOM读/写xml文档

    5. ** 读取XML **:使用`QFile`打开XML文件,然后用`QDomDocument::setContent()`或`QDomDocument::parse()`加载文件内容到DOM中。 6. ** 写入XML **:创建或修改DOM后,使用`QDomDocument::toString()`生成XML字符...

    【Qt】DOM读取XML文档.rar

    本教程主要关注使用Qt的DOM(Document Object Model)模型来读取XML文档。 DOM是一种树型结构,它将XML文档视为一系列可编程的对象。在Qt中,我们使用`QDomDocument`类来表示整个XML文档,而`QDomElement`、`...

    DOM4J读取XML

    DOM4J是一个轻量级、高性能且易于使用的Java库,用于处理XML文档。它提供了类似于DOM、SAX和JDOM的API,但又在其基础上进行了优化,使得在读取、写入、查询和修改XML文档时更加高效与便捷。本文将详细介绍如何使用...

    使用DOM读取XML文件

    本文将深入探讨如何使用DOM读取XML文件,并结合提供的标签“源码”和“工具”,提供实用的代码示例和相关知识。 首先,理解DOM的基本概念。DOM将XML文档看作一个由节点组成的树形结构,其中根节点代表整个文档,而...

    dom读取xml与写入xml

    读取XML文件使用DOM时,通常分为以下几个步骤: 1. 加载XML文件:使用特定的API(如JavaScript中的`XMLHttpRequest`或Java的`DocumentBuilderFactory`)加载XML文件到内存中。 2. 解析XML:调用解析器(如Java的`...

    DOM读取XML文件

    DOM解析器将整个XML文件加载到内存中,形成一个树形结构,允许开发者通过节点操作来访问和修改XML文档。这种方式的优点在于方便、直观,但缺点是占用内存较大,不适用于处理大型XML文件。 首先,我们需要了解XML的...

    利用 dom4j 解析 xml 文档

    **读取XML文档:** 1. **添加依赖**:在项目中引入dom4j库,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;dom4j &lt;artifactId&gt;dom4j &lt;version&gt;2.1.3 ``` 2. **解析XML**:使用`...

    Java用DOM4J读取XML

    本篇将通过一个示例来讲解如何使用DOM4J读取XML文件。 #### 二、DOM4J简介 **DOM4J**(Document Object Model for Java)是一个基于Java语言的XML API,由**Red Hat**维护。它提供了一个简洁高效的API来处理XML...

    dom4j-jar与dom4j解析xml文档介绍

    "dom4j-jar与dom4j解析xml文档介绍" 这个标题告诉我们,我们将探讨的是一个关于dom4j库的jar文件,以及如何使用这个库来解析XML文档。dom4j是一个Java库,它提供了丰富的API用于处理XML、HTML和DOM文档。这里的"jar...

    使用DOM解析XML文档

    文档对象模型 节点和节点树 使用DOM加载XML文档 使用DOM访问、创建和修改节点

    XMLDom.zip_XML文档

    XML文档对象模型(DOM,Document Object Model)是处理XML文档的标准API,它将XML文档视为一个可编程的对象结构,允许开发人员通过编程方式对XML文档进行创建、查询、更新和操作。 XML DOM定义了一个树形结构,其中...

    DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY 文档

    例如,你可以使用DBMS_XMLDOM.newDoc()来创建一个新的XML文档对象,使用DBMS_XMLDOM.parseXML()将XML字符串解析成DOM树,然后通过DBMS_XMLDOM.getElementsByTagName()等方法对DOM树进行查询和操作。 DBMS_XMLPARSER...

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

    DOM(Document Object Model)将整个XML文档加载到一个树形结构中,称为DOM树。这种解析方式允许通过节点遍历和访问整个文档,但对内存需求较高,尤其在处理大文件时。DOM解析器的优点在于提供了一种灵活且易于使用...

    DOM4J 读取xml字符串

    **DOM4J 读取XML字符串** DOM4J 是一个非常强大的 Java XML API,它提供了丰富的功能,使得处理 XML 文件变得更加简单。DOM4J 的设计理念是简洁、灵活且高性能,它支持 SAX 和 DOM 解析,并提供了面向对象的接口。...

    读取XML文件的四种方法

    使用DOM4J方法读取XML文件,需要创建SAXReader对象,读取XML文件得到Document对象,然后使用Element对象的elementIterator方法获取指定标签的迭代器,遍历迭代器进行数据提取。 优点:DOM4J方法提供了高效的XML解析...

    dom4j解析XML文档.ppt

    7. 读取XML文档: ```java SAXReader reader = new SAXReader(); Document document = reader.read(new File("path_to_xml_file.xml")); ``` 8. 写入XML文档: ```java XMLWriter writer = new XMLWriter(new...

Global site tag (gtag.js) - Google Analytics