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 }