Classe 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); } } }
Classe 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); } } }
Ce qui précède est le cas d'analyse sax de l'analyse XML (2) utilisant l'analyse sax pour encapsuler le document XML dans un objet. Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (www.php. cn) !