sax解析原理与案例

 1 package itcast.sax;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.xml.parsers.ParserConfigurationException;
 6 import javax.xml.parsers.SAXParser;
 7 import javax.xml.parsers.SAXParserFactory;
 8 
 9 import org.xml.sax.SAXException;
10 import org.xml.sax.XMLReader;
11 
12 public class Demo {
13     
14     public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
15         //1、创建解析工程
16         SAXParserFactory factory = SAXParserFactory.newInstance();
17         
18         //2、得到解析器
19         SAXParser sp = factory.newSAXParser();
20         
21         //3、得到读取器
22         XMLReader reader = sp.getXMLReader();
23         
24         //4、设置内容处理器
25         reader.setContentHandler(new TagValueHandler());
26         
27         //5、读取xml文档内容
28         reader.parse("src/book.xml");
29     }
30 
31 }
View Code
 1 package itcast.sax;
 2 
 3 import org.xml.sax.Attributes;
 4 import org.xml.sax.SAXException;
 5 import org.xml.sax.helpers.DefaultHandler;
 6 //获取指定标签值
 7 public class TagValueHandler extends DefaultHandler {
 8     
 9     private String currentTag;//记住当前解析到的是什么标签
10     private int needNumber=1;
11     private int currentNumber;
12 
13     @Override
14     public void characters(char[] ch, int start, int length) throws SAXException {
15     
16         if("editor".equals(currentTag)&&currentNumber==needNumber){
17             System.out.println(new String(ch,start,length));
18         }
19         
20     }
21 
22     @Override
23     public void endElement(String uri, String localName, String name)
24             throws SAXException {
25     
26         currentTag=null;
27     }
28 
29     @Override
30     public void startElement(String uri, String localName, String name,
31             Attributes atts) throws SAXException {
32     
33         currentTag=name;
34         if(currentTag.equals("editor")){
35             currentNumber++;
36         }
37     }
38     
39 }
View Code
 1 package itcast.sax;
 2 
 3 import org.xml.sax.Attributes;
 4 import org.xml.sax.ContentHandler;
 5 import org.xml.sax.Locator;
 6 import org.xml.sax.SAXException;
 7 
 8 public class ListHandle implements ContentHandler {
 9     @Override
10     public void startElement(String uri, String localName, String name,
11             Attributes atts) throws SAXException {
12 
13         System.out.println("<" + name + ">");
14         
15         for(int i=0;atts!=null&&i<atts.getLength();i++){
16             String attName = atts.getQName(i);
17             String attValue = atts.getValue(i);
18             System.out.println(attName+"="+attValue);
19         }
20 
21     }
22 
23     @Override
24     public void characters(char[] ch, int start, int length)
25             throws SAXException {
26 
27         System.out.println(new String(ch, start, length));
28     }
29 
30     @Override
31     public void endElement(String uri, String localName, String name)
32             throws SAXException {
33         System.out.println("<" + name + ">");
34     }
35 
36     @Override
37     public void startDocument() throws SAXException {
38 
39     }
40 
41     @Override
42     public void endDocument() throws SAXException {
43         // TODO Auto-generated method stub
44 
45     }
46 
47     @Override
48     public void endPrefixMapping(String arg0) throws SAXException {
49         // TODO Auto-generated method stub
50 
51     }
52 
53     @Override
54     public void ignorableWhitespace(char[] arg0, int arg1, int arg2)
55             throws SAXException {
56         // TODO Auto-generated method stub
57 
58     }
59 
60     @Override
61     public void processingInstruction(String arg0, String arg1)
62             throws SAXException {
63         // TODO Auto-generated method stub
64 
65     }
66 
67     @Override
68     public void setDocumentLocator(Locator arg0) {
69         // TODO Auto-generated method stub
70 
71     }
72 
73     @Override
74     public void skippedEntity(String arg0) throws SAXException {
75         // TODO Auto-generated method stub
76 
77     }
78 
79     @Override
80     public void startPrefixMapping(String arg0, String arg1)
81             throws SAXException {
82         // TODO Auto-generated method stub
83 
84     }
85 
86 }
View Code
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <书架>
 3     <>
 4         <bookname name="zero">java jiuyepeixunjiaocheng</bookname>
 5         <editor>zhangxiaoxiang</editor>
 6         <price>109yuan</price>
 7     </>
 8     <>
 9         <bookname>javaWebprogramming</bookname>
10         <editor>lihuoming</editor>
11         <price>28.00yuan</price>
12     </>
13 </书架>
View Code

 

posted @ 2014-06-21 12:16  是但哥  阅读(215)  评论(0)    收藏  举报