三、SAX 方式解析 XML 数据

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <books>
 3     <book id="1001">
 4         <name>软件工程</name>
 5         <author>王一一</author>
 6         <price>66</price>
 7     </book>
 8     <book id="1002">
 9         <name>计算机网络</name>
10         <author>乔二二</author>
11         <price>89</price>
12     </book>
13 </books>
 1 import java.io.IOException;
 2 
 3 import javax.xml.parsers.ParserConfigurationException;
 4 import javax.xml.parsers.SAXParser;
 5 import javax.xml.parsers.SAXParserFactory;
 6 
 7 import org.xml.sax.SAXException;
 8 
 9 public class TestSAXParse {
10     public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
11     //1)    创建SAXParserFactory的对象
12         SAXParserFactory spf=SAXParserFactory.newInstance();
13     //2)    创建SAXParser对象 (解析器)
14         SAXParser parser=spf.newSAXParser();
15     //3)    创建一个DefaultHandler的子类
16         BookDeaultHandler bdh=new BookDeaultHandler();
17     //4)    调用parse方法
18         parser.parse("book.xml", bdh);
19 
20     }
21 }
 1 public class BookDeaultHandler extends DefaultHandler {
 2     //重写第一个方法
 3     /**解析xml文档开始时调用*/
 4     @Override
 5     public void startDocument() throws SAXException {
 6         // TODO Auto-generated method stub
 7         super.startDocument();
 8         System.out.println("解析xml文档开始");
 9     }
10     /*解析xml文档结束时调用*/
11     @Override
12     public void endDocument() throws SAXException {
13         // TODO Auto-generated method stub
14         super.endDocument();
15         System.out.println("解析xml文档结束");
16     }
17     /**解析xml文档中的节点时调用*/
18     @Override
19     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
20         // TODO Auto-generated method stub
21         super.startElement(uri, localName, qName, attributes);
22         //System.out.println("解析xml文档中的节点时调用");
23         /**判断,如果是book节点,获取节点的属性和属性值*/
24         if("book".equals(qName)){
25             //获取所有的属性
26             int count=attributes.getLength();//属性的个数
27             //循环获取每个属性
28             for(int i=0;i<count;i++){
29                 String attName=attributes.getQName(i);//属性名称
30                 String attValue=attributes.getValue(i);//属性值
31                 System.out.println("属性名称:"+attName+"	属性值为:"+attValue);
32             }
33         }else if(!"books".equals(qName)&&!"book".equals(qName)){
34             System.out.print("节点的名称:"+qName+"	");
35         }
36         
37     }
38     /**解析xml文档中的节点结束调用*/
39     @Override
40     public void endElement(String uri, String localName, String qName) throws SAXException {
41         // TODO Auto-generated method stub
42         super.endElement(uri, localName, qName);
43         //System.out.println("解析xml文档中的节点结束调用");
44     }
45     @Override
46     public void characters(char[] ch, int start, int length) throws SAXException {
47         // TODO Auto-generated method stub
48         super.characters(ch, start, length);
49         String value=new String(ch,start,length);
50         if(!"".equals(value.trim())){
51             System.out.println(value);
52         }
53         
54     }
55 }
原文地址:https://www.cnblogs.com/qiaoxin11/p/12705548.html