加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SAX解析XML

发布时间:2020-12-16 00:21:35 所属栏目:百科 来源:网络整理
导读:clipse里XML调整格式快捷键:Ctrl+Shift+F /*SAX解析的内容处理器*/ public class PersonHandler extends DefaultHandler { private ListTeacher teachers=null; private Teacher teacher; private String tag; public ListTeacher getTeachers() { return te
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); } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读