<?xml version="1.0" encoding="UTF-8"?>
<articles>
<article cate="xml">
<title>XML概述</title>
<author>沈健</author>
<date>20170404</date>
</article>
<article cate="java">
<title>java概述</title>
<author>沈斌</author>
<date>20170403</date>
</article>
</articles>
package util.xml.parse;
import java.io.File;
import java.io.InputStream;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
public class SaxXmlParse{
/**
* DOM在解析的時候會把整個XML文件全部映射到Document裏的樹狀結構。當遇到比較大
* 的XML文件時,缺點顯而易見:佔用內存多,查找速度慢。
* SAX解析器在文檔解析的時候會從XML文件的開始位置進行解析,同時定義好事件處理器,
* 來決定當前解析的部分是否有必要記錄並存儲。
*/
private static SAXParserFactory factory=SAXParserFactory.newInstance();
public SaxXmlParse(String fileName){
//獲取當前類的包名
String packageName=this.getClass().getPackage().getName().replace(".", "/");
System.out.println(packageName);
//獲取文件流
InputStream input=this.getClass().getResourceAsStream("/"+packageName+"/"+fileName);
parseXml(input);
}
private void parseXml(InputStream input){
try {
SAXParser parser=factory.newSAXParser();
//解析時間,定義解析時的時間處理
parser.parse(input, new MySaxHandler());
} catch (Exception e){
e.printStackTrace();
}
}
}
package util.xml.parse;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class MySaxHandler extends DefaultHandler {
private String content;
//當解析到元素的開始標籤時觸發
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if("article".equals(qName)){
System.out.println("找到一篇文章,所屬分類:"+attributes.getValue("cate"));
}
}
//當解析到元素的結束標籤時進行觸發
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
switch(qName){
case "title":
System.out.println("文章主題爲:"+content);
break;
case "author":
System.out.println("文章作者爲:"+content);
break;
case "date":
System.out.println("文章日期爲:"+content);
break;
}
}
//事件發生時元素的字符
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
content=new String(ch,start,length);
}
}
package util.xml.parse.test; import org.junit.Test; import util.xml.parse.SaxXmlParse; public class SaxXmlParseTest { @Test public void testSaxXmlParse(){ new SaxXmlParse("article.xml"); } }