SAX解析XML文档

实现思路:

  1. 在工程中引入Xerces-J具体解析器实现类jar包
  2. 自定义事件监听器继承自DefaultHandler
  3. 经过SAXparseFactory的newInstance()方法建立SAX解析器工厂对象
  4. 经过SAXparseFactory对象的newSAXparser()方法建立SAXParser对象
  5. 调用SAXParser对象的parse()方法解析XML文档

package com.muke.sax;

import java.io.IOException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;

import com.muke.sax.handler.Handler;

public class SAXParse {

	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
		// TODO Auto-generated method stub
		// 一、获取sax解析器的工厂对象
		SAXParserFactory factory = SAXParserFactory.newInstance();
		// 二、经过工厂对象SAXPArser建立解析器
		SAXParser saxParser = factory.newSAXParser();
		// 三、经过解析saxParser的parse()方法设定解析的文件和本身定义的事件处理对象
		saxParser.parse("C://Users/admin/Desktop/data.xml", new Handler());
	}

}复制代码

自定义监听器java

package com.muke.sax.handler;

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

public class Handler extends DefaultHandler {
	// 定义一个变量来保存当前正在处理的tag
	private String currentTag;
	
	// 每当处理文本数据时将触发该方法
	@Override
	public void characters(char[] ch, int start, int length) throws SAXException {
		String content = new String(ch,start,length);
		if(content.trim().length()>0){
			System.out.println("<"+currentTag+">元素的值是:"+content);
		}
	}

	// 解析文档结束时触发该方法
	@Override
	public void endDocument() throws SAXException {
		System.out.println("解析文档结束");
	}

	// 每当解析元素时结束该方法
	@Override
	public void endElement(String uri, String localName, String qName) throws SAXException {
		System.out.println("处理元素结束:"+qName);
	}

	// 解析文档开始时
	@Override
	public void startDocument() throws SAXException {
		System.out.println("解析文档开始");
	}

	// 每当解析元素开始时触发该方法
	@Override
	public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
		System.out.println("开始处理元素:"+qName);
		currentTag=qName;
		if(attributes.getLength()>0){
			System.out.println("<"+currentTag+">元素的属性以下:");
			for(int i=0;i<attributes.getLength();i++){
				System.out.println(attributes.getQName(i)+"---->"+attributes.getValue(i));
			}
		}
	}
	
}复制代码

SAX生成XML文档

实现思路:

  1. 建立保存XML的结果流对象
  2. 获取sax生产工厂对象实例
  3. 获取sax生产处理者对象实例
  4. 获取sax生产器
  5. 生产文档以及文档中的元素

package com.muke.sax;

import java.io.File;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;

import org.xml.sax.helpers.AttributesImpl;

public class SaxCreateXML {

	public static void main(String[] args) throws Exception{
		// 一、建立保存XML的结果流对象
		StreamResult resultXML = new StreamResult(new File("C://Users/admin/Desktop/datas.xml"));
		// 二、获取sax生成工厂实例
		SAXTransformerFactory saxTransformerFactory=(SAXTransformerFactory)SAXTransformerFactory.newInstance();
		// 三、获取SAX生产处理对象实例
		TransformerHandler transformerHandler=saxTransformerFactory.newTransformerHandler();
		transformerHandler.setResult(resultXML);
		//获取SAX生成器
		Transformer transformer=transformerHandler.getTransformer();
		// 设置参数,容许设置空格
		transformer.setOutputProperty(OutputKeys.INDENT, "yes");
		//由于默认生成的文档字符编码为utf-8,故很少作设置
		
		// 生成文档开始
		transformerHandler.startDocument();
		
		// 生成属性,此处生成空属性,设置属性能够使用AttributesImpl.add方式来设置
		AttributesImpl attributesImpl=new AttributesImpl();
		
		//生成元素开始
		transformerHandler.startElement("", "", "书籍列表", attributesImpl);
		
		transformerHandler.startElement("", "", "计算机书籍", attributesImpl);
		transformerHandler.startElement("", "", "书名", attributesImpl);
		transformerHandler.characters("Java思想".toCharArray(), 0, "Java思想".length());
		transformerHandler.endElement("", "", "书名");
		transformerHandler.endElement("", "", "计算机书籍");
		
		transformerHandler.startElement("", "", "计算机书籍", attributesImpl);
		transformerHandler.startElement("", "", "书名", attributesImpl);
		transformerHandler.characters("Spring指南".toCharArray(), 0, "Spring指南".length());
		transformerHandler.endElement("", "", "书名");
		transformerHandler.endElement("", "", "计算机书籍");
		
		transformerHandler.endElement("", "", "书籍列表");
		
		transformerHandler.endDocument();
		
		System.out.println("生成文档成功!");
	}

}
复制代码
相关文章
相关标签/搜索