使用DOM解析XML文件

首先写了一个xml文件

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
	<book id="1">
		<name>c#</name>
		<author>张三</author>
		<year>1990</year>
		<price>60</price>
	</book>

	<book id="2">
		<name>JAVA</name>
		<author>李四</author>
		<year>1991</year>
		<price>80</price>
	</book>
</bookstore>

Dom解析xml文件

package com.edu.xynu;

import java.io.IOException;

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

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DOMTest {

	public static void main(String[] args) {

		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
			// 创建DocumentBuilder对象
			DocumentBuilder db = dbf.newDocumentBuilder();
			// 通过DocumentBuilder对象的parse方法加载book.xml文件到当前项目下
			Document document = db.parse("books.xml");
			// 获取book节点的集合
			NodeList bookList = document.getElementsByTagName("book");
			// 通过NodeList的getLength方法获取bookList的长度
			System.out.println("一共有" + bookList.getLength() + "本书");
			// 遍历每一个book节点
			for (int i = 0; i < bookList.getLength(); i++) {
				System.out.println("*********************开始遍历第" + (i + 1)
						+ "本书*********************");
				// 通过item(i)方法获取一个book节点
				Node book = bookList.item(i);
				// 获取book节点的所有属性
				NamedNodeMap attrs = book.getAttributes();
				System.out.println("第" + (i + 1) + "本书共有" + attrs.getLength()
						+ "个属性");
				// 遍历book的属性
				for (int j = 0; j < attrs.getLength(); j++) {
					// 通过item方法获取book节点的某个属性
					Node attr = attrs.item(j);
					// 获取属性名
					System.out.print("属性名:" + attr.getNodeName());
					// 获取属性值
					System.out.println("\t属性值:" + attr.getNodeValue());
				}

				NodeList childNodes = book.getChildNodes();
				// 遍历childNodes获取每个节点名和节点值
				System.out.println("第" + (i + 1) + "本书共有"
						+ childNodes.getLength() + "个节点");
				for (int j = 0; j < childNodes.getLength(); j++) {
					// 区分text类型的node以及element类型的node
					if (childNodes.item(j).getNodeType() == Node.ELEMENT_NODE) {
						System.out.print("第" + (j + 1) + "个节点的节点名:"
								+ childNodes.item(j).getNodeName());
						System.out.println("--节点值:"
								+ childNodes.item(j).getFirstChild()
										.getNodeValue());
					}
				}
				System.out.println("*********************结束遍历第" + (i + 1)
						+ "本书*********************");
			}
		} catch (ParserConfigurationException e) {

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

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

			e.printStackTrace();
		}
	}

}

运行结果:

一共有2本书

*********************开始遍历第1本书*********************

第1本书共有1个属性

属性名:id 属性值:1

第1本书共有9个节点

第2个节点的节点名:name--节点值:c#

第4个节点的节点名:author--节点值:张三

第6个节点的节点名:year--节点值:1990

第8个节点的节点名:price--节点值:60

*********************结束遍历第1本书*********************

*********************开始遍历第2本书*********************

第2本书共有1个属性

属性名:id 属性值:2

第2本书共有9个节点

第2个节点的节点名:name--节点值:JAVA

第4个节点的节点名:author--节点值:李四

第6个节点的节点名:year--节点值:1991

第8个节点的节点名:price--节点值:80

*********************结束遍历第2本书*********************

时间: 2024-09-30 04:23:15

使用DOM解析XML文件的相关文章

DOM解析XML文件

除了可以使用SAX解析XML文件,大家也可以使用熟悉的DOM来解析XML文件. DOM解析XML文件时,会将XML文件的所有内容读取到内存中,然后允许您使用DOMAPI遍历XML树.检索所需的数据.使用DOM操作XML的代码看起来比较直观,并且,在某些方面比基于SAX的实现更加简单.但是,因为DOM需要将XML文件的所有内容读取到内存中,所以内存的消耗比较大,特别对于运行Android的移动设备来说,因为设备的资源比较宝贵,所以建议还是采用SAX来解析XML文件,当然,如果XML文件的内容比较小

JAVA中使用DOM解析XML文件

JAVA中使用DOM解析XML文件: 创建DocumentBuilderFactory的对象                                 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 创建DocumentBuilder对象 通过documentBuilder对象的parser方法加载xml文件到当前项目下 获取所有XML文件内节点的集合    getElementsByTagName()方

java DOM解析xml文件出现#text节点解决方案

java DOM解析xml文件出现#text节点解决方案 原生java解析xml的方法提供了两个,DocumentBuilder 和 SAXParser. 试了第一个DOM方法,在解析输出节点过程中,getNodeName()输出节点名发现多出了几个#text节点. text.xml <?xml version="1.0" encoding="UTF-8"?> <!-- xml解析测试文件 --> <LData> <ldat

使用第三方DOM解析XML文件

第一步:引入动态库 第二步:拖入第三方文件 第三放文件网址 https://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/ 根据文件的的要求在工程中添加相应的字段 // libxml includes require that the target Header Search Paths contain // // /usr/include/libxml2 // // and Oth

iOS:使用第三方DOM解析XML文件

第一步:引入动态库 第二步:拖入第三方文件 根据文件的的要求在工程中添加相应的字段 // libxml includes require that the target Header Search Paths contain // // /usr/include/libxml2 // // and Other Linker Flags contain // // -lxml2 这时引入的文件是MRC的,让其能在ARC的环境下运行需要更改设置 需要更改单个文件是否采用ARC来进行编译有两种情况,我

解析XML文件的两种方式 SAX和DOM

1.数据解析 解析的基本概念 所谓“解析”:从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 2.XML数据结构 XML:Extensible Markup language(可扩展标记语言),主流数据格式之一,可以用来存储和传输数据. XML数据格式的功能 数据交换 内容管理 用作配置文件 XML数据结构的语法 声明 节点使用一对标签表示:起始和结束标签. 根节点是起始节点,只有一

UI进阶 解析XML文件的两种方式 SAX和DOM

1.数据解析 解析的基本概念 所谓“解析”:从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 2.XML数据结构 XML:Extensible Markup language(可扩展标记语言),主流数据格式之一,可以用来存储和传输数据. XML数据格式的功能 数据交换 内容管理 用作配置文件 XML数据结构的语法 声明 节点使用一对标签表示:起始和结束标签. 根节点是起始节点,只有一

2017/4/26-DOM解析XML文件

DOM解析XML 1.分析 DOM是JAVA自带的XML解析API.DOM首先将XML文件全部加载至内存中,然后再内存中创建DOM树,生成DOM树上的每个Node节点. 2.优点 1) 可以创建或修改XML文件内容. 2) 进行XSLT转换. 3) 进行Xpath过滤. 3.缺点 1) 由于DOM会先把XML文件加载至内存中并使用DOM树,因此文件过大时,会占用非常多的内存. 2) 相对于SAX,效率上也会有明显的下降. 4.适用场合 1) 当需要对XML文档进行修改或者创建XML文档时,可以使

【Android进阶】解析XML文件之使用DOM解析器

在前面的文章中,介绍了使用SAX解析器对XML文件进行解析,SAX解析器的优点就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析.DOM解析器的优点可能是理解起来比较的直观,当然,每个人对不同的解析方法可能有不同的喜好.但是DOM解析器有个比较大的缺点,就是占用内存比较多,在Android中的XML解析中,还是更推荐其他的解析方式. 下面介绍使用DOM解析器对XML进行解析. 下面是我们需要解析的xml文件 <?xml version="1.0" encodin