SAX解析XML

clipse里XML调整格式快捷键:Ctrl+Shift+F /*SAX解析的内容处理器*/ public class PersonHandler extends DefaultHandler { private List<Teacher> teachers=null; private Teacher teacher; private String tag; public List<Teacher> getTeachers() { return teachers; } @override //重新startDocument()方法,开始解析XML时回调的方法 public void startDocument() throws SAXException { //super.startDocument(); teachers=new ArrayList<Teacher>(); } @override public void endDocument() throws SAXException { super.endDocument(); System.out.println("XML解析完毕"); } //解析开始元素<> uri——表示标签的命名空间 localName——元素名(不带前缀) qName——带前缀的元素名称 attributes——属性的集合 @override public void startElement(String uri,String localName,String qNname,Attributes attributes ) throws SAXException { //super.startElement(uri,localName,gName,attributes); if("teacher".equals(qName)) { teacher=new Teacher(); teacher.setId(Integer.parseInt(attributes.getValue("id"))); //取出属性,并添加到teacher中 } tag=qName; } //解析结束元素</> @override public void endElement(String uri,String gNname,Attributes attributes ) throws SAXException { //super.endElement(uri,attributes); if("teacher".equals(gName)) { teachers.add(teacher); } tag=null; } //解析文本内容时解析的方法 @override public void characters(char[] ch,int start,int length) throws SAXException { //super.characters(ch,start,length); if(tag!=NULL){ if("name".equals(tag)) { teacher.setName(new String(ch,length)); }else("desc".equals(tag)) { teacher.setDesc(new String(ch,length)); } } } } public class SAXDemo { public static void main(String args[]) { //创建SAX解析器工厂 SAXParserFactory spf=SAXParserFactory.newInstance(); //通过解析器工厂创建解析器 SAXParser sax=spf.newSAXParser(); //创建SAX解析器要使用的事件帧听器对象 PersonHandler ph=new PersonHandler(); //构建一个指向指定文件的输入流 InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsstream("person.xml"); //开始解析,并返回Document对象 sax.parse(is,ph); List<Teacher> list=ph.getTeachers(); System.out.println(list); } //根据文档的节点获取数据 NodeList nodeList=doc.getElementsByTagName("teacher"); List<Teacher> teachers=new ArrrayList(Teacher)(); Teacher t=null; for(int i=0;i<nodeList.getLength();i++) { t=new Teacher(); Node teacherNode =nodeList.item(i); //获取当前节点的属性id Teachernode.getAttributes().getNamedItem("id").getNodeValue(); t.setId(Integer.parseInt(id)); //获取当前节点下的所有子节点列表 NodeList childNodeList=teacherNode.getChildNodes(); for(int j=0;j<childNodeList.getLength();j++ ) { Node childNode=childNodeList.item(j); String tagname= childNode.getNodeName(); if("name"equals(tagname)) { t.setName(childNode.getFirstChild().getNodeValue); }else("desc"equals(tagname)) { t.setDesc(childNode.getFirstChild().getNodeValue); } } teachers.add(t); } }

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念