xml解析
1、Dom解析http://www.cnblogs.com/shenliang123/archive/2012/05/11/2495252.html
//得到DOM解析器的工厂实例 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); //从DOM工厂中获得DOM解析器 DocumentBuilder builder = factory.newDocumentBuilder(); //通过DocumentBuilder的parse方法获得一个文档对象 //Document doc = builder.parse(InputStream); Document doc = builder.parse(".xml"); //得到根节点 Element root = doc.getDocumentElement(); //得到root节点内名称为student的元素的节点列表 NodeList nodeList = root.getElementsByTagName("student"); //遍历该集合,从集合中取出信息 。。。 //一些常用方法 Node node =list.item(i);//取出列表中内的一个节点 node.getNodeType()//获得节点类型 node.getNodeName()//获得该节点名称 node.getFirstChild()//获得该节点的第一个子节点 node.getNodeValue())//获得该节点的值 node.getAttribute("")//通过名称获得属性值
2、SAX解析http://www.cnblogs.com/felix-hua/archive/2012/01/10/2317404.html
//新建一个工厂类SAXParserFactory SAXParserFactory factory = SAXParserFactory.newInstance(); //让工厂类产生一个SAX的解析类SAXParser SAXParser parser = factory.newSAXParser(); //使用SAXParser的parser方法传入xml流和自定义的Handeler,解析开始 parser.parse(is,new MyHandeler); //自定义Handeler: class MyHandler extends DefaultHandler{ //当解析文档开始时回调此方法 startDocument() //当解析文档结束时回调此方法 endDocument() //当解析到一个元素开始时回调此方法 startElement(String uri, String localName, String qName,Attributes attributes){ //localName不带命名空间 qName带命名空间 attributes.get(String attrID)//获得名称为attrID的属性值 } //当解析到一个元素结束时回调此方法 endElement(String uri, String localName, String qName) //当解析到元素的内容时回调此方法 characters(char[] ch, int start, int length) }
3、Pull解析
//新建一个XmlPullParserFactory工厂类 XmlPullParserFactory factory=XmlPullParserFactory.newInstance(); //新建一个XmlPullParser解析器 XmlPullParser parser=factory.newPullParser(); //使用XmlPullParser的setInput方法设置要解析的xml流和编码 parser.setInput(XmlPullParser, "utf-8"); int event = parser.getEventType();//产生第一个事件 while(event!=XmlPullParser.END_DOCUMENT){ switch(event){ case XmlPullParser.START_DOCUMENT://判断当前事件是否是文档开始事件 books = new ArrayList<Book>();//初始化books集合 break; case XmlPullParser.START_TAG://判断当前事件是否是标签元素开始事件 if("book".equals(parser.getName())){//判断开始标签元素是否是book book = new Book(); book.setId(Integer.parseInt(parser.getAttributeValue(0)));//得到book标签的属性值,并设置book的id } if(book!=null){ if("name".equals(parser.getName())){//判断开始标签元素是否是name book.setName(parser.nextText()); }else if("price".equals(parser.getName())){//判断开始标签元素是否是price book.setPrice(Float.parseFloat(parser.nextText())); } } break; case XmlPullParser.END_TAG://判断当前事件是否是标签元素结束事件 if("book".equals(parser.getName())){//判断结束标签元素是否是book books.add(book);//将book添加到books集合 book = null; } break; } event = parser.next();//进入下一个元素并触发相应事件 } return books;