用 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文档,首先需要创建一个`SAXReader`对象,然后调用`read`方法传入XML文件路径。这将返回一个`Document`对象,我们可以从中获取所有元素信息。 ```java File file = new File("path_to_xml_file")...
5. ** 读取XML **:使用`QFile`打开XML文件,然后用`QDomDocument::setContent()`或`QDomDocument::parse()`加载文件内容到DOM中。 6. ** 写入XML **:创建或修改DOM后,使用`QDomDocument::toString()`生成XML字符...
本教程主要关注使用Qt的DOM(Document Object Model)模型来读取XML文档。 DOM是一种树型结构,它将XML文档视为一系列可编程的对象。在Qt中,我们使用`QDomDocument`类来表示整个XML文档,而`QDomElement`、`...
DOM4J是一个轻量级、高性能且易于使用的Java库,用于处理XML文档。它提供了类似于DOM、SAX和JDOM的API,但又在其基础上进行了优化,使得在读取、写入、查询和修改XML文档时更加高效与便捷。本文将详细介绍如何使用...
本文将深入探讨如何使用DOM读取XML文件,并结合提供的标签“源码”和“工具”,提供实用的代码示例和相关知识。 首先,理解DOM的基本概念。DOM将XML文档看作一个由节点组成的树形结构,其中根节点代表整个文档,而...
读取XML文件使用DOM时,通常分为以下几个步骤: 1. 加载XML文件:使用特定的API(如JavaScript中的`XMLHttpRequest`或Java的`DocumentBuilderFactory`)加载XML文件到内存中。 2. 解析XML:调用解析器(如Java的`...
DOM解析器将整个XML文件加载到内存中,形成一个树形结构,允许开发者通过节点操作来访问和修改XML文档。这种方式的优点在于方便、直观,但缺点是占用内存较大,不适用于处理大型XML文件。 首先,我们需要了解XML的...
**读取XML文档:** 1. **添加依赖**:在项目中引入dom4j库,如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>dom4j <artifactId>dom4j <version>2.1.3 ``` 2. **解析XML**:使用`...
本篇将通过一个示例来讲解如何使用DOM4J读取XML文件。 #### 二、DOM4J简介 **DOM4J**(Document Object Model for Java)是一个基于Java语言的XML API,由**Red Hat**维护。它提供了一个简洁高效的API来处理XML...
"dom4j-jar与dom4j解析xml文档介绍" 这个标题告诉我们,我们将探讨的是一个关于dom4j库的jar文件,以及如何使用这个库来解析XML文档。dom4j是一个Java库,它提供了丰富的API用于处理XML、HTML和DOM文档。这里的"jar...
文档对象模型 节点和节点树 使用DOM加载XML文档 使用DOM访问、创建和修改节点
XML文档对象模型(DOM,Document Object Model)是处理XML文档的标准API,它将XML文档视为一个可编程的对象结构,允许开发人员通过编程方式对XML文档进行创建、查询、更新和操作。 XML DOM定义了一个树形结构,其中...
例如,你可以使用DBMS_XMLDOM.newDoc()来创建一个新的XML文档对象,使用DBMS_XMLDOM.parseXML()将XML字符串解析成DOM树,然后通过DBMS_XMLDOM.getElementsByTagName()等方法对DOM树进行查询和操作。 DBMS_XMLPARSER...
DOM(Document Object Model)将整个XML文档加载到一个树形结构中,称为DOM树。这种解析方式允许通过节点遍历和访问整个文档,但对内存需求较高,尤其在处理大文件时。DOM解析器的优点在于提供了一种灵活且易于使用...
**DOM4J 读取XML字符串** DOM4J 是一个非常强大的 Java XML API,它提供了丰富的功能,使得处理 XML 文件变得更加简单。DOM4J 的设计理念是简洁、灵活且高性能,它支持 SAX 和 DOM 解析,并提供了面向对象的接口。...
使用DOM4J方法读取XML文件,需要创建SAXReader对象,读取XML文件得到Document对象,然后使用Element对象的elementIterator方法获取指定标签的迭代器,遍历迭代器进行数据提取。 优点:DOM4J方法提供了高效的XML解析...
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...