Java Sax解析

一.   Java Sax解析是按照xml文件的顺序一步一步的来解析,在解析xml文件之前,我们要先了解xml文件的节点的种类,一种是ElementNode,一种是TextNode。如下面的这段book.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <bookStore>
 3     <book id="1">
 4         <name>thinking in java</name>
 5         <price>88</price>
 6         <author>Bruce Eckel</author>
 7     </book>
 8 
 9     <book id="2">
10         <name>java编程思想</name>
11         <price>98</price>
12         <author>陈昊鹏  译</author>
13     </book>
14 </bookStore>
<bookStore>是ElementNode,thinking in java 内容属于TextNode。

首先Sax解析器加载xml文件,sax解析是按照读取文件的顺序进行解析,当读入文件时,会调用startDocument()方法。读入<bookStore>时候,因为它是一个Element节点,调用startElement(String uri, String localName, String qName, Attributes attributes)方法,然后读入
<bookStore>和<book>节点之间的内容,会调用characters(char[] ch, int start, int length),这个会解析成"\n\t",然后解析<book>节点,调用endElement(String uri,String localName,String qName)其中qName是节点的名称。然后解析book节点的内容,调用characters方法接着调用endElement()方法,一直到文档结束。
 1 import java.io.File;
 2 import javax.xml.parsers.SAXParser;
 3 import javax.xml.parsers.SAXParserFactory;
 4 import org.xml.sax.Attributes;
 5 import org.xml.sax.SAXException;
 6 import org.xml.sax.helpers.DefaultHandler;
 7 
 8 public class SaxParseTest
 9 {
10   public static void main(String[] args) throws Exception
11   {
12     saxParseXml("src/book.xml");
13   }
14   
15   static void saxParseXml(String fileName) throws Exception{
16     SAXParserFactory factory = SAXParserFactory.newInstance();
17     SAXParser saxParser = factory.newSAXParser();
18     saxParser.parse(new File(fileName), new mySaxHanlder());
19   }
20   
21 }
22 
23 class mySaxHanlder extends DefaultHandler{
24   @Override
25   public void startElement(String uri,String localName,String qName, Attributes attributes) throws SAXException
26   {
27     System.out.print("<"+qName+">");
28   }
29 
30   @Override
31   public void endElement(String uri,String localName,String qName) throws SAXException
32   {
33     System.out.print("</"+qName+">");
34   }
35 
36   @Override
37   public void characters(char[] ch, int start, int length) throws SAXException
38   {
39     System.out.print(new String(ch,start,length));
40   }
41 }

代码只是将加载的xml文件内容输出到控制台。注意:不要将节点之间的空白忘记,它会将空白当成文本节点(TextNode)进行解析.

posted @ 2016-03-08 11:43  掉尾瓶  阅读(223)  评论(0编辑  收藏  举报