DOM 解析简单 xml 文档

java 中对 xml 文档的解析可以分为四种方式:DOM、JDOM、SAX、DOM4J。我们这儿用的是 DOM 的解析。

注意:创建document对象和element对象时候需要进行导包,这里导入的包应该是org.w3c.dom.Document和org.w3c.dom.Element,否则没有提供操纵XML的api,会报错。此demo 里需要导入的剩下的包都是 javax.xml 下的包。

首先:要有一个 xml 文档(在 eclipse 中新建一个 .xml 格式的文件,或者粘贴一个)



	
		懂得生活
		Mr Azzan
		2017
		100.00
	
	
		热爱生活
		Miss Sun
		2017
		121.00
	
	
		品味生活
		Miss Sun
		2016
		111.00
	
	
		珍惜生活
		Miss Azzan
		2014
		100.00
	

其次:编写解析代码

package com.test.xml;

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.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DomDemo {
	/**
	 * 读取一个 xml 文档
	 */
	public static void test1() {
		// 创建一个工厂来创建流水线 创建一个构造器
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		try {
			// 通过创建一个工厂来创建流水线 创建一个构造器
			DocumentBuilder builder = factory.newDocumentBuilder();
			// 构造文档
			Document doc = builder.parse("books.xml");
			// 获取一个根元素
			Element root = doc.getDocumentElement();
			System.out.println("读取一个 xml 文档");
			// 获取一个元素节点名称
			System.out.println(root.getNodeName());
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 获取指定的元素集合 并且获取元素的属性信息
	 */
	public static void test2() {
		// 创建一个工厂来创建流水线 创建一个构造器
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		try {
			// 通过创建一个工厂来创建流水线 创建一个构造器
			DocumentBuilder builder = factory.newDocumentBuilder();
			// 构造文档
			Document doc = builder.parse("books.xml");
			// 根据元素名 标签名 来获取所有的元素 小知识 ===》 Ctry+q 回到当前的位置
			NodeList studentList = doc.getElementsByTagName("book"); // NodeList 是一个数组
			System.out.println("获取指定的元素集合 并且获取元素的属性信息");
			// studentList.getLength(); 数组元素的长度
			for (int i = 0; i < studentList.getLength(); i++) {
				// 遍历内容 出来一个具体的节点
				Node student = studentList.item(i);
				// 用 .getNodeName() 方法 ,获取 student 的名称
				System.out.print(student.getNodeName());
				System.out.print("===>");
				// 打印属性名
				System.out.print(student.getAttributes().item(0).getNodeName() + ",");
				// 打印属性名的信息值 node节点 item 逐条列出 Attributes 属性
				System.out.println(student.getAttributes().item(0).getNodeValue());
			}
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 获取元素的子元素集合,并解析元素文本内容
	 */
	public static void test3() {
		// 创建一个工厂来创建流水线 创建一个构造器
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		try {
			// 通过创建一个工厂来创建流水线 创建一个构造器
			DocumentBuilder builder = factory.newDocumentBuilder();
			// 构造文档
			Document doc = builder.parse("books.xml");
			// 根据元素名 标签名 来获取所有的元素 小知识 ===》 Ctry+q 回到当前的位置
			NodeList studentList = doc.getElementsByTagName("book"); // NodeList 是一个数组
			System.out.println("获取元素的子元素集合,并解析元素文本内容");
			// studentList.getLength(); 数组元素的长度
			for (int i = 0; i < studentList.getLength(); i++) {
				// 遍历内容 出来一个具体的节点
				Node student = studentList.item(i);
				// 获取子元素信息
				NodeList nodeList = student.getChildNodes();
				for (int j = 0; j < nodeList.getLength(); j++) {
					Node node = nodeList.item(j);
					if ("name".equals(node.getNodeName()) || "author".equals(node.getNodeName())) {
						System.out.print(node.getNodeName() + "==>");
						System.out.println(node.getTextContent());
					}
					if ("year".equals(node.getNodeName()) || "price".equals(node.getNodeName())) {
						System.out.print(node.getNodeName() + "==>");
						System.out.println(node.getTextContent());
					}
				}
				System.out.println();
			}
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println();
	}

	public static void main(String[] args) {
		test1();
		System.out.println();
		test2();
		System.out.println();
		test3();

	}

}

最后:解析结果如图

DOM 解析简单 xml 文档_第1张图片@Super_Sunleo

期待你的评论!!!

你可能感兴趣的:(java)