xml解析

来源:互联网 发布:骁龙410玩王者荣耀优化 编辑:程序博客网 时间:2024/06/16 12:18
1.SAX解析SAX特点:优点:不用实现调入整个文档,占用资源少。尤其在嵌入式环境中,如android,极力推荐使用SAX解析。

缺点:不像DOM解析一样将文档长期驻留在内存中,数据不是持久的。如果事件过后没有保存数据,数据就会丢失。SAX解析XML文档采用事件驱动模式。什么是事件驱动模式?它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理。基于事件驱动的处理模式主要是基于事件源和事件处理器(或者叫监听器)来工作的。一个可以产生事件的对象叫做事件源,而一个可以针对事件做出响应的对象就被叫做事件处理器。

使用:继承DefaultHandler类 需要重写的方便 :characters(),endDocument(),endElement(),startElement(),startDocument()

使用sax来解析代码

SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser parser = factory.newSAXParser();parser.parse(inStream, this);


2.DOM解析

特点:

DOM解析XML会将XML文件的所有内容以文档树方式存放在内在中,然后允许您使用DOMAPI遍历XML树、检索所需的数据。因为DOM需要将XML文件的所有内容以文档树方式存入在内在中,所以内在的消耗比较大。

3.Pull解析
Pull解析和Sax解析相似,提供了类似的事件。
使用方式:
XmlPullParser parser = Xml.newPullParser();parser.setInput(FileInputStream, "UTF-8");int eventType = parser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {String name = parser.getName();switch (eventType) {case XmlPullParser.START_DOCUMENT:persons = new ArrayList<Ch05Ex03.Person>();break;case XmlPullParser.START_TAG:if ("person".equals(name)) {person = new Person();} else if ("id".equals(name)) {person.id = Integer.valueOf(parser.nextText());} else if ("name".equals(name)) {person.name = parser.nextText();} else if ("age".equals(name)) {person.age = Integer.valueOf(parser.nextText());}break;case XmlPullParser.END_TAG:if ("person".equals(name)) {persons.add(person);person = null;}break;}eventType = parser.next();}


4.Pull生成XML
FileOutputStream outStream = null;try {File file1 = new File(Environment.getExternalStorageDirectory()+ File.separator + "cgh" + File.separator);if (!file1.exists())file1.mkdir();File file2 = new File(file1, "a.xml");outStream = new FileOutputStream(file2);// 生成XMLXmlSerializer serializer = Xml.newSerializer();serializer.setOutput(outStream, "UTF-8");serializer.startDocument("UTF-8", true);serializer.startTag(null, "persons");// 循环List取数据for (Person p : persons) {serializer.startTag(null, "person");serializer.startTag(null, "id");serializer.text(p.id + "");serializer.endTag(null, "id");serializer.startTag(null, "name");serializer.text(p.name + "");serializer.endTag(null, "name");serializer.startTag(null, "age");serializer.text(p.age + "");serializer.endTag(null, "age");serializer.endTag(null, "person");}serializer.endTag(null, "persons");serializer.endDocument();Toast.makeText(this, "生成XML完成", Toast.LENGTH_SHORT).show();} catch (Exception e) {Log.e(tag, e.getMessage());e.printStackTrace();} finally {try {if (outStream != null)outStream.close();} catch (IOException e) {e.printStackTrace();}}
5.SharedPreferences存储数据
SharedPreferences sp = this.getSharedPreferences("b", Context.MODE_APPEND);Editor editor = sp.edit();editor.putString("name", name.getText() + "");editor.putString("age", age.getText() + "");editor.commit();