`

(备忘录)xml文件的生成和解析_SAX_2

阅读更多
一边加载一边解析,速度快,内存占用小,但是如果再次使用时需要再次解析:

当解析器发现元素开始、元素结束、文本、文档的开始或结束等时,发送事件,程序员编写响应这些事件的代码,保存数据。优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;使用场合:Applet;只需XML文档的少量内容,很少回头访问;机器内存少




package com.ailk.xmlparserdemon;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
import org.xml.sax.helpers.DefaultHandler;

import com.ailk.xmlparserdemon.intf.XmlDocument;

public class SaxXmlDemon implements XmlDocument {
	static String filename;

	public void createDocument(String fileName) {
		try {
			StreamResult result=new StreamResult(new FileOutputStream(filename));
			SAXTransformerFactory sf=(SAXTransformerFactory) SAXTransformerFactory.newInstance();
			TransformerHandler th=sf.newTransformerHandler();
			th.setResult(result);
			
			Transformer tf=th.getTransformer();
			tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
			tf.setOutputProperty(OutputKeys.INDENT, "yes");
			
			th.startDocument();
			AttributesImpl atts=new AttributesImpl();
			th.startElement("", "", "employees", atts);
			th.startElement("", "", "employee", atts);
			
			th.startElement("", "", "name", atts);
			th.characters("小明".toCharArray(), 0, "小明".length());
			th.endElement("", "", "name");
			
			th.startElement("", "", "sex", atts);
			th.characters("m".toCharArray(), 0, "m".length());
			th.endElement("", "", "sex");
			
			th.startElement("", "", "parents", atts);
			
			th.startElement("", "", "father", atts);
			th.characters("小张".toCharArray(), 0, "小张".length());
			th.endElement("", "", "father");
			
			th.startElement("", "", "mother", atts);
			th.characters("小慧".toCharArray(), 0, "小慧".length());
			th.endElement("", "", "mother");
			
			th.endElement("", "", "parents");
			
			th.endElement("", "", "employee");
			th.endElement("", "", "employees");
			
			th.endDocument();
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TransformerConfigurationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (TransformerFactoryConfigurationError e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SAXException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		

	}

	public void parserDocument(String fileName) {
		SAXParserFactory saxfac = SAXParserFactory.newInstance();
		try {
			SAXParser saxparser = saxfac.newSAXParser();
			InputStream is = new FileInputStream(fileName);
			saxparser.parse(is, new MySAXHandler());
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		} catch (SAXException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		SaxXmlDemon sax = new SaxXmlDemon();
		SaxXmlDemon.filename = "E:\\OneNote\\dom1.xml";
		sax.createDocument(filename);
		sax.parserDocument(filename);
	}

}

class MySAXHandler extends DefaultHandler {
	boolean hasAttribute = false;
	Attributes attributes = null;

	public void startDocument() throws SAXException {
		System.out.println("文档开始打印了");
	}

	public void endDocument() throws SAXException {
		System.out.println("文档打印结束了");
	}

	public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {
		if (qName.equals("employees")) {
			return;
		}
		if (qName.equals("employee")) {
			System.out.println(qName);
		}
		if (attributes.getLength() > 0) {
			this.attributes = attributes;
			this.hasAttribute = true;
		}
	}

	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if (hasAttribute && (attributes != null)) {
			for (int i = 0; i < attributes.getLength(); i++) {
				System.out.println(attributes.getQName(0)
						+ attributes.getValue(0));
			}
		}
	}

	public void characters(char[] ch, int start, int length)throws SAXException {
		System.out.println(new String(ch, start, length));
	}
}

分享到:
评论

相关推荐

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

    "sax_xml sax_解析_xml"标签表明了本压缩包包含使用SAX解析XML的示例代码。 3. **JDOM**:JDOM是一个Java API,专门用于读写XML文档。它提供了一个更面向Java的对象模型,使得XML处理更加直观。JDOM在DOM的基础上...

    XML_DOM_SAX.rar_ XML_DOM_SAX_c# sax_dom解析xml_xml parser csharp_x

    2. SAX解析: SAX(Simple API for XML)是一种事件驱动的解析方式,它不将整个文档加载到内存,而是逐行读取并触发相应的事件,如开始元素、结束元素等。这种方式节省了内存,适合处理大型XML文件,但需要编写更多...

    test_sax.rar_XML SAX vs20_sax_sax xml_读取XML文档

    在处理大型XML文件时,为了提高效率,通常会采用两种解析器:DOM(Document Object Model)和SAX(Simple API for XML)。本文将重点讨论SAX解析器,并通过描述中的"test_sax.rar"压缩包中的示例,讲解如何使用SAX...

    xml_DOM_SAX.rar_DOM_dom xml saxxml_java dom_sax

    在Java中,处理XML文件主要有两种解析器:DOM(Document Object Model)和SAX(Simple API for XML)。这两种解析方式各有特点,适用于不同的场景。 1. DOM解析: DOM解析器将整个XML文档加载到内存中,构建一个树...

    SAX_XML.rar_XML SAX_sax xml_xml

    本示例中,"SAX_XML.rar"包含了一个关于如何使用SAX解析XML的项目。"SaxParsePage.class"是已经编译好的Java类文件,用于执行SAX解析。"SaxParsePage.java"是对应的源代码文件,展示了如何编写SAX解析器的实现。...

    SAX解析XML文件实例

    一个项目同时用dom解析和sax解析xml文件貌似会报错,项目框架建一直是用sax和dom4j解析xml文件的。当我用dom解析xml文件。导入包后就报错识别不了xml文件的编码格式。于是做了一个sax解析xml文件的实例

    xml.rar_android_android sax_android sax xml_java xml_sax

    本资料包“xml.rar”主要关注Android环境下的XML解析,特别是SAX解析器,同时也涵盖了DOM和Pull解析方式。 1. XML基本概念: XML是一种自描述性的标记语言,它通过标签来定义数据结构。每个XML文档都包含元素、...

    java_xml.rar_java xml_sax_xml_xml ja_操作 xml

    2. **SAX解析器** SAX是一种事件驱动的解析器,它逐行读取XML文档,遇到元素、属性等时触发相应的事件回调。这种方法节省了内存,但不支持随机访问,更适合处理大型XML文件。 - **SAX解析器优点**:内存效率高,...

    XML.rar_XML SAX_XML java_dom xml_java xml_java解析xml

    本篇文章将重点讲解XML在Java中的解析方式,特别是DOM和SAX解析。 1. DOM解析: DOM(Document Object Model)是W3C推荐的一种处理XML文档的标准模型。它将整个XML文档加载到内存中,构建一个树形结构,允许开发者...

    xml_分析器.zip_XML VC_XML 解析_XML解析_vc解析xml_xml解析器

    2. `ce_xml.cpp`:这是实现XML解析器的主要源代码文件,包含C++代码来解析XML文档。开发者可能在这里定义了XML解析的相关函数,如解析元素、属性和文本的方法。 3. `ce_xml.sln`:这是一个Visual Studio解决方案文件...

    SAX与JAVA.rar_SAX java_java SAX_java sax download_sax_xml

    标签中的"java_sax"和"sax_xml"强调了这是关于Java语言中的SAX解析器和XML处理的资料。"java_sax_download"表明这些程序可以被下载,供开发者参考和学习。 压缩包内的文件名列表揭示了这些程序的具体功能: 1. **...

    tinyxml_2_1_5.tar.gz_XML解析_tinyxml 下载_xml XML_xml 解析器_xml解析器

    TinyXML_2_1_5是TinyXML的一个特定版本,提供了对XML文档的读取、创建和修改功能。 TinyXML库的核心特点包括: 1. **轻量级**:TinyXML的体积小,内存占用低,不依赖其他大型库,便于在资源有限的环境中使用。 2. ...

    xml.rar_dom操作xml_java 操作 xml_java xml_sax_xml

    - "xml"文件可能是测试用的XML文件,用于演示DOM和SAX解析。 学习和掌握Java操作XML的这两种方法,对于开发人员来说至关重要,尤其是在处理XML数据交换、配置文件或与Web服务交互时。DOM适合小型XML文档和需要频繁...

    android_sax_xml.zip_android_android sax

    综上所述,"android_sax_xml.zip"提供的示例旨在展示如何在Android环境中使用SAX解析XML,这对于理解XML解析的底层机制和优化移动应用的性能至关重要。通过学习和实践这个示例,开发者可以更好地处理服务器返回的XML...

    VC_WND_SAX.rar_sax_sax vc_vc SAX _vc xml sax

    这种方式使得SAX解析器在处理大型XML文件时具有较高的性能和较低的内存消耗。对于VC++开发者而言,实现SAX解析器的关键在于理解XML规范并正确地编写这些回调函数。 首先,我们需要了解SAX解析的基本流程。当解析器...

    XML.rar_XML解析_c# xml_xml_xml C解析_解析xml

    2. **SAX解析**:Simple API for XML(SAX)是一种基于事件的解析器,它不会一次性加载整个文档,而是逐个处理元素。C#中没有内置的SAX解析器,但可以使用`System.Xml.XmlReader`实现类似功能。例如: ```csharp ...

    xml.zip_XML 解析_XML解析_xml linux

    它们可能包含了针对特定XML结构的解析和生成代码,例如读取或设置摄像头的配置参数。在这样的代码中,通常会看到对XML节点的查找、创建以及值的提取和设置。 对于“XML的字符解析和分解”,这可能指的是处理XML中的...

    xml.rar_XML c语言_c语言 xml_resolver_xml解析 c_解析xml

    在C语言中,XML解析库如libxml2提供了DOM和SAX解析的功能,但在“xml.rar”中,开发者可能是基于C语言实现了一个轻量级的解析器,专为处理小到中等规模的XML文件设计。这有助于避免引入大型库的依赖,同时降低了程序...

    XMLDemo_java.rar_XMLDemo_java_java xml_sax_to write xml in java

    - "saxtest.xml"和"domtest.xml"是测试用的XML文件,分别用于SAX和DOM解析的测试。 5. **源代码目录**: "SRC"目录很可能包含了XML处理的Java源代码文件,这些文件可能包含XML读取、解析和写入的具体实现。 总结...

Global site tag (gtag.js) - Google Analytics