• 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);
    		}
    	}
    }
    


  • 相关阅读:
    Delphi Variant 通用类型[3] 流 Stream的相互转换
    Delphi System单元 Utf8ToAnsi、AnsiToUtf8、Utf8Decode、Utf8Encode、Utf8ToUnicode、UnicodeToUtf8 转换
    OCR (Optical Character Recognition,光学字符识别)
    使用Python写Windows Service服务程序
    双精度张量内核加快了高性能计算
    A100计算能力
    A100 Tensor核心可加速HPC
    A100 GPU硬件架构
    NVIDIA深度架构
    稀疏性如何为AI推理增加难度
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299717.html
Copyright © 2020-2023  润新知