• XML解析之sax解析案例(二)使用sax解析把 xml文档封装成对象


    Demo1类:

    import java.io.File;
    import java.util.List;
    
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    /**
     * 使用sax解析把 xml文档封装成对象
     * @author APPle
     *
     */
    public class Demo3 {
    
    	public static void main(String[] args)throws Exception {
    		SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
    		MyDefaultHandler3 handler = new MyDefaultHandler3();
    		parser.parse(new File("./src/contact.xml"), handler);
    		List<Contact> list = handler.getList();
    		for (Contact contact : list) {
    			System.out.println(contact);
    		}
    	}
    }
    

    MyDefaultHandler3类:

    import java.util.ArrayList;
    import java.util.List;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    /**
     * SAX处理程序
     * @author APPle
     *
     */
    public class MyDefaultHandler3 extends DefaultHandler {
    	//存储所有联系人对象
    	private List<Contact> list = new ArrayList<Contact>();
    	
    	public List<Contact> getList(){
    		return list;
    	}
    	//保存一个联系人信息
    	private Contact contact;
    	/**
    	 * 思路: 
    	 * 	1)创建Contact对象
    	 *  2)把每个contact标签内容存入到Contact对象
    	 *  3)把Contact对象放入List中
    	 */
    	//用于临时存储当前读到的标签名
    	private String curTag;//用于方法跨度使用变量。
    
    	@Override
    	public void startElement(String uri, String localName, String qName,
    			Attributes attributes) throws SAXException {
    		curTag = qName;
    		//读取到contact的开始标签创建Contact对象,这里说明了什么时候创建Content对象最合适。
    		if("contact".equals(qName)){
    			contact = new Contact();
    			
    			//设置id值
    			contact.setId(attributes.getValue("id"));//根据指定名字获取id值
    		}
    	}
    	
    	@Override
    	public void characters(char[] ch, int start, int length)
    			throws SAXException {
    		//当前文本内容
    		String content = new String(ch,start,length);//String类构造方法获取到当前文本的额内容。
    		
    		if("name".equals(curTag)){
    			contact.setName(content);
    		}
    		
    		if("age".equals(curTag)){
    			contact.setAge(content);
    		}
    		
    		if("phone".equals(curTag)){
    			contact.setPhone(content);
    		}
    		
    		if("email".equals(curTag)){
    			contact.setEmail(content);
    		}
    		
    		if("qq".equals(curTag)){
    			contact.setQq(content);
    		}
    	}
    	
    	@Override
    	public void endElement(String uri, String localName, String qName)
    			throws SAXException {
    		//结束标签后就设置null。这里设置为null很重要。设置空是为了避免空格换行设置到对象的属性中,空格换行进去了就把原来放进去的数据覆盖掉。
    		curTag = null;
    		//读到Contact的结束标签把content对象放入List中
    		if("contact".equals(qName)){
    			list.add(contact);
    		}
    	}
    }
    


  • 相关阅读:
    Web 性能优化
    js 校验身份证
    html5 输入框响应enter按键
    获取浏览器的可视窗口宽高
    js打开新标签
    Java数据脱敏框架
    Spring Boot中的事务管理
    运维监控知识体系
    git常用命令图解 & 常见错误
    安全团队不可错过的七个云安全开源工具(转载)
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299717.html
Copyright © 2020-2023  润新知