`
baobaocao521
  • 浏览: 30506 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

XML解析之DOM解析

阅读更多

      为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。

package xml;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

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 XMPParser{
	
	private Document document ;
	
	private static String fileName = "C:/Users/Administrator/Desktop/TestXml.xml";
	
	//执行方法
	public static void main(String[] args){
		
		XMPParser parser = new XMPParser();
		parser.init();
		
		//创建XML文件
		//parser.createXML(fileName);
		
		//解析XML文件
		parser.parserXML(fileName);
	}
	
	//初始化方法
	public void init()
	{
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder db = dbf.newDocumentBuilder();
			this.document = db.newDocument();
			
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}
		
	}
	
	//创建XML文件
	public void createXML(String fileName)
	{
		//创建根节点employees
		Element root = this.document.createElement("employees");
		this.document.appendChild(root);
		
		//创建employee子节点
		Element employe = this.document.createElement("employee");
		
		//创建employee子节点中的name节点
		Element name = this.document.createElement("name");
		//创建name子节点的文本值
		name.setAttribute("style", "green");
		name.appendChild(this.document.createTextNode("刘兴超"));
		
		//把name子节点封装到employee节点中
		employe.appendChild(name);
		
		/**
		 * 创建sex节点
		 */
		Element sex = this.document.createElement("sex");
		sex.appendChild(this.document.createTextNode("girl"));
		employe.appendChild(sex);
		
		/**
		 * 创建age节点
		 */
		Element age = this.document.createElement("age"); 
		age.appendChild(this.document.createTextNode("30")); 
		employe.appendChild(age);
		
		//把employe子节点封装到root根节点下
		root.appendChild(employe);
		
		TransformerFactory tf = TransformerFactory.newInstance(); 
		
		try {
			Transformer transformer = tf.newTransformer();
			
			DOMSource source = new DOMSource(document); 
			
			transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
			
			transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 
			
			PrintWriter pw;
			try {
				pw = new PrintWriter(new FileOutputStream(fileName));
				StreamResult result = new StreamResult(pw); 
				
				transformer.transform(source, result); 
				
				System.out.println("生成XML文件成功!"); 
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (TransformerException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
			
	
		} catch (TransformerConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	//解析XML文件
	public void parserXML(String fileName) {
		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
		try {
			DocumentBuilder db = dbf.newDocumentBuilder();
			Document document = db.parse(fileName);
			
			NodeList employes = document.getChildNodes();
			
			for(int i = 0 ; i< employes.getLength();i++)
			{
				Node node = employes.item(i);
				System.out.println("node 1 =" + node.getNodeName());
				NodeList employeeMeta = node.getChildNodes();
				for (int k = 0; k < employeeMeta.getLength(); k++) 
				{ 
					Node noded = employeeMeta.item(k);
					System.out.println("node 2 =" + noded.getNodeName());
					String nodeName = noded.getNodeName();
					String TextContent = noded.getTextContent();
					System.out.print(nodeName + ":" + TextContent);
					System.out.println();
					} 
			}
			
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}
}
 

 

分享到:
评论

相关推荐

    XML解析之DOM

    在"XML解析之DOM"这一主题中,我们将深入探讨DOM解析器如何工作,以及如何通过DOM API获取XML文件中的信息。DOM解析器将整个XML文档加载到内存中,形成一个节点树,每个元素、属性、文本等内容都对应一个节点。这种...

    XML解析技术DOM4J解析

    ### XML解析技术DOM4J解析 #### DOM4J解析概览 DOM4J是一种高性能、功能强大且极其易于使用的Java XML API,它最初是作为JDOM的一个智能分支发展起来的,自2000年下半年开始持续开发。DOM4J不仅在功能上超越了基本...

    xml解析之DOM

    这篇博文“xml解析之DOM”深入探讨了DOM解析器在处理XML文档时的工作原理和使用方法。 DOM解析器的主要功能是将XML文档加载到内存中,创建一个节点树,其中每个元素、属性、文本和注释等都对应一个节点。根节点代表...

    Android XML解析(DOM、PULL、SAX三种方式)

    Android系统提供了三种主要的XML解析方式:DOM(Document Object Model)、PULL(Pull Parser)和SAX(Simple API for XML)。每种方法都有其独特的特性和应用场景,下面将详细介绍这三种XML解析方式。 1. DOM解析...

    JDK自带xml解析器dom+sax

    JDK(Java Development Kit)提供了两种内置的XML解析器:DOM(Document Object Model)和SAX(Simple API for XML),它们各有特点,适用于不同的场景。 1. DOM解析XML: DOM解析器将整个XML文档加载到内存中,...

    dom4j解析xml详解

    DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时的强大工具。DOM4J的最大亮点在于其简洁易用的API...

    易语言 xml解析 易语言 xml解析 教程 带源码

    易语言XML解析是编程领域中的一个重要主题,尤其对于使用易语言进行开发的程序员来说,理解并掌握XML(可扩展标记语言)的解析方法是至关重要的。XML作为一种结构化数据存储和交换格式,广泛应用于网络通信、配置...

    dom,dom4j,sax 解析xml文件实例

    本文将深入探讨DOM、DOM4J和SAX三种常用的XML解析方法,并结合具体的实例进行详细讲解。 首先,DOM(Document Object Model)是W3C组织推荐的一种XML解析标准。它将整个XML文档加载到内存中,构建一个树形结构,...

    Android XML解析 SAX DOM Pull

    在Android中,有三种主要的XML解析方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull Parser。下面将详细介绍这三种解析方式,并结合person类的实例进行讲解。 1. SAX解析: SAX是一种事件驱动...

    DOM_XML.rar_DOM_dom xml_dom xml java_dom解析xml_java解析xml

    标题中的"DOM_XML.rar"可能是一个包含DOM解析XML相关示例的压缩文件,"DOM_dom xml_dom xml java_dom解析xml_java解析xml"这部分描述了文件的主要内容,即关于DOM(Document Object Model)在XML解析中的应用,特别...

    dom4j---xml解析jar包

    **DOM4J——XML解析库详解** XML(eXtensible Markup Language)作为一种标记语言,广泛应用于数据交换、配置文件和文档存储等领域。在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行...

    DOM4J xml解析工具

    SAX是事件驱动的解析器,适用于大文件,而DOM解析会将整个文档加载到内存,适合小文件。DOM4J的灵活性在于,可以根据需求选择合适的解析策略。 2. **构建XML文档**:DOM4J提供了丰富的API,允许开发者创建新的XML...

    多层镶嵌xml解析.zip

    总结一下,DOM4J提供了一种灵活、高效的XML解析方式,尤其适用于处理具有复杂结构的XML文档。通过创建和操作DOM4J的`Element`对象,我们可以方便地解析XML,提取所需数据,并将其存储到自定义的实体类中。对于大型...

    xmldom4j解析

    DOM解析会将整个XML文档加载到内存中形成一棵树形结构,方便访问任意节点,但内存消耗大;SAX解析则采用事件驱动,逐行读取XML,适合处理大型文档,但不支持随机访问。 三、DOM4J解析XML 1. 创建Document对象:使用...

    Dom方式解析XML

    DOM解析器会一次性加载整个XML文档到内存,因此适用于小型或中型XML文件,对于大型文件可能会消耗大量内存。 1. **DOM解析XML的基本步骤** - **导入库**:首先,在Android项目中,我们需要导入处理XML的Java API,...

    xml解析文件的两种方式

    本文将详细介绍XML解析文件的两种主要方式:SAX(Simple API for XML)和DOM(Document Object Model)。 **1. DOM解析** DOM解析方式是将整个XML文档加载到内存中,构建一个树形结构,称为DOM树。这个树的每个...

    XML解析实践之DOM解析和SAX解析.rar

    在进行XML解析时,需要注意以下几点: 1. 选择解析器:Java中,有如DOM4J、JAXB、Apache Xerces等库支持DOM解析;SAX解析则可以使用Java内置的SAXParserFactory。Python中,有ElementTree库支持DOM和SAX解析。 2. ...

Global site tag (gtag.js) - Google Analytics