`

XML - -DOM解析

阅读更多

========

                 理解熟悉:

// StreamResult result=new StreamResult(new FileOutputStream(path));
// SteamResult:充当转换结果的持有者,可以为 XML、纯文本、HTML 或某些其他格式的标记。
// StreamResult(OutputStream outputStream);从字节流构造 StreamResult。
                 StreamResult result=new StreamResult(new OutputStreamWriter(new FileOutputStream(path), "gb2312"));
// 然后将被变换的Document对象封装到一个DOMSource对象中,DOMSource类在javax.xml.transform.dom包中。 
                DOMSource  source=new DOMSource(document);
                transformer.transform(source, result);

========

 ================================代码开始========================================

一。XMLDemo

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;

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 XMLDemo {
	private Document document = null;
	public static void main(String[] args) {
		XMLDemo xd=new XMLDemo();
		xd.getDocument();
		xd.showInfo();
//		xd.add();
//		xd.update();
//		xd.savaXML("new.xml");
//		xd.delete();
	}
	public void getDocument(){
		try {
			//创建解析器工厂实例
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			//通过工厂获得解析器
			DocumentBuilder db;
			db = factory.newDocumentBuilder();
			//解析器对象指定XML文件创建Document对象
			document = db.parse("收藏信息.xml");
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	//载入元素
	public void showInfo(){
		//以Document为起点操作DOM树,拿到brand节点集合
		NodeList brands =document.getElementsByTagName("brand");
		for(int i=0;i<brands.getLength();i++){
			//获得集合里的各个元素(element)
			Node node=(Node)brands.item(i);
			//类型转换为(element)
			Element eleBrand=(Element)node;
			//取得元素里 属性名name的属性值
			System.out.println(eleBrand.getAttribute("name"));
			
			//拿到brand节点下子节点type集合
			NodeList types=eleBrand.getChildNodes();
			for(int j=0;j<types.getLength();j++){
				Node typeNode=types.item(j);
				//为了过滤掉文本里空格和文本等,加上判断是否为元素,不然运行容易报错
				if(typeNode.getNodeType()==Node.ELEMENT_NODE){
					Element eleType=(Element)typeNode;
					System.out.println("  "+eleType.getAttribute("typename"));
				}
			}
		}
	}
		
	//保存新新XML文件
	public void savaXML(String path){
/*
 *  DOM对象转化为XML文件
        解析器通过在内存中建立和XML结构相对应的树状结构数据,使得应用程序可以方便地获得XML文件中的数据,
        同时提供了使用内存中的树状结构数据建立一个XML文件的API,即使用解析器得到的Document对象建立一个新的XML文件。
        但是需要注意的是,Android2.1中没有相应的类包,从2.2开始才加入了。
        解析器的parse方法将整个被解析的XML文件封装成一个Document节点返回,
        我们可以对Document节点进行修改,然后使用 Transformer对象将一个Document节点变换为一个XML文件。
 * */
		TransformerFactory factory=TransformerFactory.newInstance();
		factory.setAttribute("indent-number", "4");
		try {
			Transformer transformer=factory.newTransformer();
			transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
//			StreamResult result=new StreamResult(new FileOutputStream(path));
//			SteamResult:充当转换结果的持有者,可以为 XML、纯文本、HTML 或某些其他格式的标记。
//			StreamResult(OutputStream outputStream);从字节流构造 StreamResult。
			StreamResult result=new StreamResult(new OutputStreamWriter(new FileOutputStream(path), "gb2312"));
//			然后将被变换的Document对象封装到一个DOMSource对象中,DOMSource类在javax.xml.transform.dom包中。			
			DOMSource  source=new DOMSource(document);
			transformer.transform(source, result);
		} catch (TransformerConfigurationException e) {
			e.printStackTrace();
		} catch (TransformerException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		
	}
	
	//增加元素
	public void add(){
		Element element=document.createElement("Brand");
		element.setAttribute("name", "三星");
		Element ele1=document.createElement("Type");
		ele1.setAttribute("typename", "Note3");
		element.appendChild(ele1);
		document.getElementsByTagName("PhoneInfo").item(0).appendChild(element);
		this.savaXML("new.xml");
	}
	
	//删除元素
	public void delete(){
		NodeList brands=document.getElementsByTagName("Brand");
		for(int i=0;i<brands.getLength();i++){
			Node brand=brands.item(i);
			Element eleBrand=(Element)brand;
			if(eleBrand.getAttribute("name").equals("苹果")){
				eleBrand.getParentNode().removeChild(eleBrand);
			}
		}
	//	this.savaXML("new.xml");
	}
	
	//修改元素,为每一个Brand增加一个id 属性分别为 0 1 2 ;
	public void update(){
		NodeList brands=document.getElementsByTagName("Brand");
		for(int i=0;i<brands.getLength();i++){
			Node brand=brands.item(i);
			Element eleBrand=(Element)brand;
			eleBrand.setAttribute("id", i+"");
		}
	//	this.savaXML("new.xml");
	}
}

 二、收藏信息.xml

<?xml version="1.0" encoding="GB2312"?>
<PhoneInfo>
	<brand name="华为">
		<type typename="U8650"/>
		<type typename="HW123"/>
		<type typename="HW321"/>
	</brand>
	<brand name="苹果">
		<type typename="iphone4"/>
		<type typename="iphone5"/>
		<type typename="iphone6"/>
	</brand>
</PhoneInfo>

 

分享到:
评论

相关推荐

    XML ----DOM操作

    1. **加载XML文档**:首先,我们需要创建一个DOM解析器,如Java中的`DocumentBuilderFactory`和`DocumentBuilder`,它们用于读取XML文件并构建DOM树。 2. **获取根节点**:解析后的XML文档会被转换为一个`Document`...

    DOMParser解析xml

    DOMParser接口提供了解析XML字符串并创建DOM文档的方法,以便于开发者可以使用DOM API来查询、修改或操作XML数据。 以下是对"DOMParser解析XML"这一主题的详细说明: 1. **DOMParser的基本使用**: 使用DOMParser...

    XML四种解析方式------DOM SAX JDOM DOM4J

    DOM解析器将整个XML文档加载到内存中,形成一个树形结构,称为DOM树。每个XML元素、属性、文本等都被表示为树中的节点。这种解析方式的优点是可以方便地通过节点关系进行遍历和修改,但缺点是占用内存大,尤其对于...

    xml-apis-2.0.2.jar ecside 依赖包之一

    这个特定的版本可能包含了XML解析器如Apache Xerces或IBM XML4J,以及相关的接口和类,比如DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等解析方式。 DOM是XML数据的...

    Android解析xml(2)---DOM解析

    DOM解析器将整个XML文档加载到内存中,形成一个树形结构,便于对XML数据进行遍历和操作。以下是关于Android中DOM解析XML的详细知识讲解。 1. **DOM解析器简介** DOM解析器是XML解析的一种方法,它将整个XML文档...

    XML-Parser-2.41.tar.gz

    XML解析器有多种类型,如DOM(Document Object Model)解析器,它将整个XML文档加载到内存中形成一棵树状结构,便于遍历和修改;SAX(Simple API for XML)解析器则采用事件驱动的方式,逐个处理XML元素,节省内存但...

    xml-DOM教学PPT

    在解析XML文档时,DOM一次性加载整个文档到内存中,构建出一个树形结构,方便开发者通过API直接查找、添加、删除和修改节点。相比于SAX解析器,DOM在解析时消耗更多资源,但提供了更直观和方便的编程模型。 DOM的...

    前端开源库-xml-js

    1. **XML解析**:库首先解析XML字符串,将其转化为DOM(Document Object Model)树结构。DOM是一种标准,允许程序和脚本动态更新、添加和改变HTML或XML文档的内容和结构。 2. **DOM到JSON转换**:解析后的DOM树被...

    XML-Parser-2.36.rar_ XML-Parser-2.36_XML-Parser-2.36

    DOM解析器将整个XML文档加载到内存中,形成一棵节点树,允许程序随意遍历和修改;而SAX解析器则采用事件驱动的方式,按需处理XML文档,占用资源较少,适用于大文件或内存有限的环境。 XML-Parser-2.36 版本可能包含...

    xml-dom4j解析工具类

    这个“xml-dom4j解析工具类”显然是为了简化XML文档操作而设计的,它利用DOM4J库来处理XML数据。 首先,让我们详细了解一下DOM4J的核心概念。DOM4J提供了一个灵活的API,以树形结构表示XML文档。在DOM(Document ...

    XML-java.rar_XML SAX_sax_sax xml_sax 解析 xml_xml using dom

    1. **DOM解析**:DOM是一种树型结构,它将整个XML文档加载到内存中,允许开发者通过节点遍历整个文档。这种方法适用于小型XML文件,因为大型文件可能会占用大量内存。DOM解析器的优点是易于操作和查询,但缺点是内存...

    simple-xml-dom:用于节点和浏览器的 DOMParser 和 XMLSerializer 的薄包装器

    注意:xmldom 没有与 simple-xml-dom 一起安装 用法 基本的 可用的方法是parse和serialize 。 var xml = require ( 'simple-xml-dom' ) // Parse var dom = xml . parse ( '&lt;hello&gt;world&lt;/hello&gt;' ) dom . ...

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    6. **StAX(Streaming API for XML)支持**:DOM4J也支持StAX解析器,这种解析方式结合了SAX的高效和DOM的易用性,可以在处理大型XML文件时节省内存。 7. **与JAXB集成**:DOM4J可以与Java Architecture for XML ...

    xml解析器-----dom4j.jar

    DOM4j类包,已经打包,放在工程项目的BIN下

    XML解析工具- TinyXML2 -源代码 - C++

    它使用文档对象模型(DOM)的方式解析XML,可解析 XML 文档,并根据该文档构建可读取、修改和保存的文档对象模型。 作为XML解析器,TinyXML-2具有以下特点: 1. 轻量级且易于集成:它体积小巧,代码简洁,易于集成...

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

    它支持SAX和DOM解析器,同时也提供了XPath查询和事件驱动的处理模式。 2. **XML解析方式**:dom4j提供了两种主要的XML解析方式:SAX(Simple API for XML)和DOM(Document Object Model)。SAX是流式解析,适用于...

    dom4j-1.6.1 与 dom4j-2.0.0-ALPHA

    它支持SAX和DOM解析器,同时提供了基于事件的解析模型和基于树的解析模型。此版本的主要特性包括: 1. 支持XPath:DOM4J提供了一种强大的方式来查询XML文档,通过XPath表达式可以轻松地找到需要的数据。 2. 文档...

    xml-apis.jar包解压后就可以得到

    它们为开发者提供了处理XML文档的强大工具,无论是在构建XML解析器、解析XML文件、创建XML文档,还是在XML数据的验证和转换中,都有广泛的应用。 在Java项目中,通常会将`xml-apis.jar`作为依赖引入,以便使用其...

    xml--DOM技术

    在实际应用中,DOM技术常用于动态网页和Web应用程序,例如AJAX(Asynchronous JavaScript and XML)中,XML数据被请求并解析成DOM树,然后用JavaScript更新页面内容。此外,XMLHttpRequest对象也经常与DOM结合,用于...

    dom4j解析xml详解

    ### DOM4J解析XML详解 #### 一、DOM4J简介与特性 DOM4J是一个由dom4j.org开发的开源XML解析包,专为Java平台设计,它不仅支持DOM、SAX和JAXP标准,还巧妙地融入了Java集合框架,使其成为Java开发者在处理XML数据时...

Global site tag (gtag.js) - Google Analytics