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 }
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)&¤tNumber==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 }
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 }
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 </书架>

浙公网安备 33010602011771号