Home  >  Article  >  Backend Development  >  XML parsing sax parsing case (2) using sax parsing to encapsulate xml documents into objects

XML parsing sax parsing case (2) using sax parsing to encapsulate xml documents into objects

黄舟
黄舟Original
2017-02-16 15:16:291609browse

Demo1 Class:


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 Class:


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


The above is the sax parsing case of XML parsing (2) using sax parsing to encapsulate the xml document into an object. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn