博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SAX解析XML文档
阅读量:6474 次
发布时间:2019-06-23

本文共 4142 字,大约阅读时间需要 13 分钟。

实现思路:

  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		// 1、获取sax解析器的工厂对象		SAXParserFactory factory = SAXParserFactory.newInstance();		// 2、通过工厂对象SAXPArser创建解析器		SAXParser saxParser = factory.newSAXParser();		// 3、通过解析saxParser的parse()方法设定解析的文件和自己定义的事件处理对象		saxParser.parse("C://Users/admin/Desktop/data.xml", new Handler());	}}复制代码

自定义监听器

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.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{		// 1、创建保存XML的结果流对象		StreamResult resultXML = new StreamResult(new File("C://Users/admin/Desktop/datas.xml"));		// 2、获取sax生成工厂实例		SAXTransformerFactory saxTransformerFactory=(SAXTransformerFactory)SAXTransformerFactory.newInstance();		// 3、获取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("生成文档成功!");	}}复制代码

转载于:https://juejin.im/post/5cd13672e51d453acd5050bd

你可能感兴趣的文章
IDEA 快捷键(Windows)
查看>>
数据结构与算法——复杂度分析(一)
查看>>
【Dubbo源码阅读系列】之 Dubbo SPI 机制
查看>>
Hadoop Mapreduce 中的Partitioner
查看>>
记录flex弹性盒布局过程 - 自动margin
查看>>
arm64 架构之入栈/出栈操作
查看>>
如何优雅地在 Spring Boot 中使用自定义注解,AOP 切面统一打印出入参日志 | 修订版...
查看>>
简单才是王道?刚开源的微服务任务调度平台SIA—TASK初探
查看>>
关于双重锁单例模式
查看>>
小白的进阶之路之vue源码解读(0)
查看>>
《Miss Talk》第05期:对话唱唱启蒙英语技术总监 李超
查看>>
【Android架构】基于MVP模式的Retrofit2+RXjava封装之多Url(七)
查看>>
MockJS快速入门
查看>>
前端机试之js方法封装
查看>>
struts2配置文件示例
查看>>
删除目录以及目录下的所有文件
查看>>
课堂作业系列(1)
查看>>
Xtralogic Remote Desktop Client 远程桌面客户端体验
查看>>
Windows下安装Ulipad编辑器
查看>>
前些天七天酒店面试的一点感悟。
查看>>