sax解析特点:1、逐行读取
2、事件处理-- 方法
3、解析器调用相应的事件
4、只能读取文件
DefaultHandler 可以触发5个事件
*startDocument() 开始文档
*startElement() 开始元素
*characters() 文本
*endElement() 结束元素
*endDocument() 结束文档
在startElement
/**
* 如果xml文件使用了schema约束 <xs:element>
* * uri:schema -- targetNameSpace
* * localName--element
* * qName---xs:element
* 如果不使用
* * uri:null
* * localName:null
* * qName : element
*
* Attributes:当前元素的所有的属性的集合
*/
1 //获得解析工厂实例 2 SAXParserFactory factory=SAXParserFactory.newInstance(); 3 //获得解析器 4 SAXParser parser=factory.newSAXParser(); 5 //解析xml 6 DefaultHandler dh=new MyDefaultHandler(); 7 8 parser.parse("books.xml", dh);
Demo
1 public void SaxDemo() throws Exception 2 { 3 SAXParser parser= SAXParserFactory.newInstance().newSAXParser(); 4 parser.parse(Demo.class.getClassLoader().getResourceAsStream("users.xml"), new DefaultHandler(){ 5 private boolean nameOrAge=false; 6 @Override 7 public void startElement(String uri, String localName, 8 String qName, Attributes attributes) throws SAXException { 9 if(qName.equals("user")) 10 { 11 System.err.println(attributes.getValue("id")); 12 } 13 else if(qName.equals("name") || qName.equals("age")){ 14 nameOrAge=true; 15 } 16 } 17 18 @Override 19 public void endElement(String uri, String localName, String qName) 20 throws SAXException { 21 if(qName.equals("name")|| qName.equals("age")) 22 { 23 nameOrAge=false; 24 } 25 } 26 27 @Override 28 public void characters(char[] ch, int start, int length) 29 throws SAXException { 30 if(nameOrAge) 31 { 32 String value=new String(ch,start,length); 33 System.err.println(value); 34 } 35 } 36 37 }); 38 }
来源:https://www.cnblogs.com/liuwt365/p/4079274.html