<?xml version="1.0" encoding="UTF-8"?> <书架> <书> <书名>Hack36计</书名> <价格>78</价格> <作者>老死不相往来</作者> </书> <书> <书名>android高级程序设计</书名> <价格>89</价格> <作者>留下你的风衣</作者> </书> <书> <书名>C++高级架构</书名> <价格>56</价格> <作者>郁闷终生</作者> </书> </书架>
然后利用程序对其进行解析,解析的主要过程是获取第三本书的书名
详细叙述一下sax的解析过程
解析的过程就是有一个阅读器去读取xml文档,
所以sax解析的流程如下
package com.jack.xml; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; public class XMLParseTest { // 创建内容解析对象 ContentHandler handler = new ContentHandler() { String name = null; int count = 0; @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub System.out.println("开始解析对文档"); } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub System.out.println("文档解析结束"); } @Override public void startElement(String uri,String localName,String qName,Attributes atts) throws SAXException { // TODO Auto-generated method stub this.name = qName; } @Override public void characters(char[] ch,int start,int length) throws SAXException { // TODO Auto-generated method stub if ("书名".equals(name)) { count++; //System.out.println("count=====>"+count); if (count == 3) { System.out.println(new String(ch,start,length)); } } } @Override public void endElement(String uri,String qName) throws SAXException { // TODO Auto-generated method stub this.name = ""; } @Override public void setDocumentLocator(Locator locator) { // TODO Auto-generated method stub } @Override public void startPrefixMapping(String prefix,String uri) throws SAXException { // TODO Auto-generated method stub } @Override public void endPrefixMapping(String prefix) throws SAXException { // TODO Auto-generated method stub } @Override public void ignorableWhitespace(char[] ch,int length) throws SAXException { // TODO Auto-generated method stub } @Override public void processingInstruction(String target,String data) throws SAXException { // TODO Auto-generated method stub } @Override public void skippedEntity(String name) throws SAXException { // TODO Auto-generated method stub } }; public static void main(String[] args) { XMLParseTest test = new XMLParseTest(); test.saxXMLParse(); } public void saxXMLParse() { // 创建解析工厂 SAXParserFactory factory = SAXParserFactory.newInstance(); // 获取解析器 SAXParser parser = null; try { parser = factory.newSAXParser(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 获取读取器 XMLReader reader = null; try { reader = parser.getXMLReader(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 设置内容触发器 reader.setContentHandler(handler); // 解析文档 try { reader.parse("books.xml"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }