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));
}
}
}
}复制代码
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("生成文档成功!");
}
}
复制代码