SAX解析基于事件处理器
book.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
<书>
<书名 name="xxx">Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
<书>
<书名 name="yyy">JavaScript网页开发</书名>
<作者>张孝祥</作者>
<售价>28.00元</售价>
</书>
</书架>
demo.java
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 demo {
public static void main(String[] args) throws ParserConfigurationException, Exception {
// TODO Auto-generated method stub
//创建工厂
SAXParserFactory factory=SAXParserFactory.newInstance();
//解析器
SAXParser parser=factory.newSAXParser();
//读取器
XMLReader reader=parser.getXMLReader();
//内容处理器
reader.setContentHandler(new Hander());
//读取xml内容
reader.parse("book.xml");
}
static class Hander extends DefaultHandler
{
@Override //startElement
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
System.out.println("<"+qName+">");
//获取属性
for(int i=0;i<attributes.getLength();i++){
System.out.println(attributes.getQName(i)+"="+attributes.getValue(i));
}
}
@Override//endElement
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println("<"+qName+">");
}
@Override//characters
public void characters(char[] ch, int start, int length)
throws SAXException {
System.out.println(new String(ch,start,length));
}
}
}
运行结果
<书架>
<书>
<书名>
name=xxx
Java就业培训教程
<书名>
<作者>
张孝祥
<作者>
<售价>
39.00元
<售价>
<书>
<书>
<书名>
JavaScript网页开发
<书名>
<作者>
张孝祥
<作者>
<售价>
28.00元
<售价>
<书>
<书架>
将解析的数据封装成javabean
public class Book {
private String name;
private String author;
private String price;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}
解析代码
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 demo3 {
public static void main(String[] args) throws ParserConfigurationException, Exception {
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser parser=factory.newSAXParser();
XMLReader reader=parser.getXMLReader();
Hander hand=new Hander();
reader.setContentHandler(hand);
reader.parse("book.xml");
ArrayList<Book>list=hand.getooks();
System.out.println(list);
}
}
class Hander extends DefaultHandler
{
private ArrayList<Book> list=new ArrayList<Book>();
private String markName;
private Book b;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if(qName.equals("书"))
{
b=new Book();
}
markName=qName;
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if(qName.equals("书"))
{
list.add(b);
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(("书名").equals(markName))
{
b.setName(new String(ch,start,length));
}
else if(("作者").equals(markName))
{
b.setAuthor(new String(ch,start,length));
}
else if(("售价").equals(markName))
{
b.setPrice(new String(ch,start,length));
}
}
public ArrayList<Book> getooks()
{
return list;
}
}
运行结果
[[email protected], [email protected]]