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