原理:
SAX解析是读到XML文档的每一部分,就立刻进行解析。调用对应处理器的响应方法。
package com.zhao.stu;
import java.util.List;
import java.io.IOException;
import java.util.ArrayList;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;
public class jaxpTest
{
public static void main(String[] args)
{
try
{
//实例化SAX工厂
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
//获得解析器
SAXParser saxParser = saxParserFactory.newSAXParser();
//获得阅读器
XMLReader xmlReader = saxParser.getXMLReader();
final List<Book> listBooks = new ArrayList<>();
//匿名内部类
xmlReader.setContentHandler(new DefaultHandler()
{
private String currentName;
private Book book = null;
//开始读到元素
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException
{
if(qName.equals("書"))
{
book = new Book();
}
currentName = qName;
}
//结束读元素
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException
{
if(qName.equals("書"))
{
listBooks.add(book);
}
}
//获得元素内容
@Override
public void characters(char[] ch, int start, int length)
throws SAXException
{
if("書名".equals(currentName))
{
book.setName(new String(ch,start,length));
System.out.println("書名".equals(currentName));
System.out.println(currentName.equals("書名"));
currentName = null;
}
}
});
//解析xml文件
xmlReader.parse("src\\com/zhao/stu\\book.xml");
} catch (ParserConfigurationException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (SAXException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
} catch (IOException e)
{
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}