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]]