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

}
複製代碼
相關文章
相關標籤/搜索