一. 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),这个会解析成"
",然后解析<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)进行解析.