• XML解析之SAX解析过程代码详解


    上一篇谢了解析原理和过程,这里应用代码直观认识这个原理:

    新建Demo1类:

    import java.io.File;
    
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    /**
     * 第一个SAX读取xml文件程序
     * @author APPle
     *
     */
    public class Demo1 {
    
    	
    	public static void main(String[] args) throws Exception{
    		//1.创建SAXParser对象
    		//
    		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
    		
    		//2.调用parse方法
    		/**
    		 * 参数一: xml文档
    		 * 参数二: DefaultHandler的子类,默认基类,因此没法new。用子类
    		 */
    		parser.parse(new File("./src/contact.xml"), new MyDefaultHandler());
    		//使用指定的 DefaultHandler 将指定文件的内容解析为 XML。这里一定要自定义MyDefaultHandler类,且在里面实现业务逻辑。不理解先死记住这种模式。
    	}
    
    }
    

    接着给出自定义继承DefaultHandler的MyDefaultHandler


    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    /**
     * SAX处理程序(如何解析xml文档)
     * @author APPle
     *
     */
    public class MyDefaultHandler extends DefaultHandler {
    	
    	/**
    	 * 开始文档时调用
    	 */
    	@Override
    	public void startDocument() throws SAXException {
    		System.out.println("MyDefaultHandler.startDocument()");
    	}
    	
    	/**
    	 * 开始标签时调用
    	 * @param qName: 表示开始标签的标签名
    	 * @param attributes: 表示开始标签内包含的(属性)【列表】
    	 */
    	@Override
    	public void startElement(String uri, String localName, String qName,
    			Attributes attributes) throws SAXException {
    		System.out.println("MyDefaultHandler.startElement()-->"+qName);
    	}
    	
    	/**
    	 * 结束标签时调用
    	 * @param qName: 结束标签的标签名称
    	 */
    	@Override
    	public void endElement(String uri, String localName, String qName)
    			throws SAXException {
    		System.out.println("MyDefaultHandler.endElement()-->"+qName);
    	}
    	
    	/**
    	 * 读到文本内容的时调用
    	 * @param ch: 表示当前读完的所有文本内容
    	 * @param start: 表示当前文本内容的开始位置
    	 * @param length: 表示当前文本内容的长度 
    	 */ 
    	@Override
    	public void characters(char[] ch, int start, int length)
    			throws SAXException {
    		//得到当前文本内容
    		String content = new String(ch,start,length);
    		System.out.println("MyDefaultHandler.characters()-->"+content);
    	}
    	
    	/**
    	 * 结束文档时调用
    	 */
    	@Override
    	public void endDocument() throws SAXException {
    		System.out.println("MyDefaultHandler.endDocument()");
    	}
    	
    }
    
    打印输出,更直观认识sax解析过程。下一篇给出应用案例

  • 相关阅读:
    客户端加锁
    三次握手
    ForkJoinTask
    主从Reactor多线程模型
    Happen-before
    Enum
    Java 8
    Netty
    分布式一致性算法
    VisualStudio 2013 快捷键
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299719.html
Copyright © 2020-2023  润新知