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); } } }
以上就是XML剖析之sax剖析案例(二)运用sax剖析把 xml文档封装成对象的内容,更多相关内容请关注ki4网(www.ki4.cn)!