// 如果新的标签是“学生”,则表示接下来要读取学生。这里之所以需要bean为空,是因为放置学生标签的子标签也有“学生”
if (bean == null) {
if (qName.equals("学生")){
System.out.println("------Processing a student--------");
bean = new StudentBean();
bean.setGender(atts.getValue("性别"));
}
}
}
/**
* 在遇到结束标签的时候,调用这个方法
*/
public void endElement(String namespaceURI, String localName, String qName)
throws SAXException {
// 将最近读取的标签弹出
String currenttag = (String)tagsStatck.pop();
// 最近读到的标签应该与即将关闭的标签一样。
if (!currenttag.equals(qName)){
throw new SAXException("XML文档格式不正确,标签不匹配!");
}
// 如果关闭的是"学生"标签,则表示一个StudentBean已经构造完毕了。
if (qName.equals("学生")){
System.out.println("------Processing a student end--------");
// 将bean实例放入学生列表中,同时置空,等待构造下一个实例
studentBeans.add(bean);
bean = null;
}
}
/**
* 处理在XML文件中读到字符串
* @see org.xml.sax.ContentHandler#characters(char[], int, int)
*/
public void characters(char[] chs, int start, int length) throws SAXException {
// 从栈中得到当前节点的信息
String tag = (String) tagsStatck.peek();
String value = new String(chs, start, length);
if (tag.equals("姓名")){
// 如果最近读到的标签是姓名,则把字符串当作姓名的值
bean.setName(value);
} else if (tag.equals("年龄")){
bean.setAge(Integer.parseInt(value));
} else if (tag.equals("电话")){
bean.setPhone(value);
}
}