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();
- XML解析
- xml解析
- XML解析
- 解析XML
- xml解析
- 解析xml
- 解析xml
- xml解析
- XML解析
- xml解析
- XML解析
- xml解析
- xml解析
- xml解析
- xml解析
- xml解析
- 解析xml
- XML解析
- php 5.3.x 使用 rrdcached 1.4.x
- vector<int>::iterator mid=(vi.begin()+vi.end())/2
- 章文嵩:服务器定制与绿色计算
- C++中赋值运算符默认的返回值类型
- linux-Tcp IP协议栈源码阅读笔记
- xml解析
- mysql的触发器
- Source Insight 打不开问题
- Rails Rake 指南
- 在打开rc文件夹时出现“在另一个编辑器中打开”
- jQuery选择器大全(48个代码片段+21幅图演示)
- Linux 下 OpenCV2.0 的编译与安装 (ARM9)与(x86)
- vs2008 当前上下文不存在名称xxx 解决办法
- php-fpm