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("生成文檔成功!");
}
}
複製代碼