android中的xml文件解析
2014-08-26 15:32
183 查看
android中的xml解析可使用sax或dom解析或Pull解析器。本文着重于pull部分。推荐使用dom4j解析,这里不多作介绍。
使用实例:
使用Pull解析器生成一个与demo.xml文件内容相同的demo2.xml文件,使用代码如下(生成XML文件):
StringWriter writer = new StringWriter();
writeXML(persons, writer);
String content = writer.toString();
1.使用Pull解析器读取XML文件
除了可以使用 SAX和DOM解析XML文件,大家也可以使用Android内置的Pull解析器解析XML文件。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。public class PullXMLReader { public static List<Person> readXML(InputStream inStream) { XmlPullParser parser = Xml.newPullParser(); try { parser.setInput(inStream, "UTF-8"); int eventType = parser.getEventType(); Person currentPerson = null; List<Person> persons = null; while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT://文档开始事件,可以进行数据初始化处理 persons = new ArrayList<Person>(); break; case XmlPullParser.START_TAG://开始元素事件 String name = parser.getName(); if (name.equalsIgnoreCase("person")) { currentPerson = new Person(); currentPerson.setId(new Integer(parser.getAttributeValue(null, "id"))); } else if (currentPerson != null) { if (name.equalsIgnoreCase("name")) { currentPerson.setName(parser.nextText());// 如果后面是Text节点,即返回它的值 } else if (name.equalsIgnoreCase("age")) { currentPerson.setAge(new Short(parser.nextText())); } } break; case XmlPullParser.END_TAG://结束元素事件 if (parser.getName().equalsIgnoreCase("person") && currentPerson != null) { persons.add(currentPerson); currentPerson = null; } break; } eventType = parser.next(); } inStream.close(); return persons; } catch (Exception e) { e.printStackTrace(); } return null; } }
2.使用Pull解析器生成XML文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。public static String writeXML(List<Person> persons, Writer writer){ XmlSerializer serializer = Xml.newSerializer(); try { serializer.setOutput(writer); serializer.startDocument("UTF-8", true);// <?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?> serializer.startTag("", "persons");//第一个参数为命名空间,如果不使用命名空间,可以设置为null for (Person person : persons){ serializer.startTag("", "person"); serializer.attribute("", "id", person.getId().toString()); serializer.startTag("", "name"); serializer.text(person.getName()); serializer.endTag("", "name"); serializer.startTag("", "age"); serializer.text(person.getAge().toString()); serializer.endTag("", "age"); serializer.endTag("", "person"); } serializer.endTag("", "persons"); serializer.endDocument(); return writer.toString(); } catch (Exception e) { e.printStackTrace(); } return null; }
使用实例:
使用Pull解析器生成一个与demo.xml文件内容相同的demo2.xml文件,使用代码如下(生成XML文件):
File xmlFile = new File("demo2.xml"); FileOutputStream outStream = new FileOutputStream(xmlFile); OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8"); BufferedWriter writer = new BufferedWriter(outStreamWriter); writeXML(persons, writer); writer.flush(); writer.close();如果只想得到生成的xml字符串内容,可以使用StringWriter:
StringWriter writer = new StringWriter();
writeXML(persons, writer);
String content = writer.toString();
相关文章推荐
- android 中如何解析Rss订阅的xml文件
- Android 解析gbk、gb2312编码的xml文件(转)
- Android 解析XML文件 (SAX与PULL)
- Android中使用PULL方式解析XML文件
- Android中使用SAX方式解析XML文件
- android下解析xml文件遇到中文问题
- android解析xml文件的方式(其三PULL方式)
- android解析xml文件的SAX方式:Simple API for XML
- Android 解析XML文件的三种方式 DOM,SAX,PULL
- android解析xml文件的方式(其一DOM方式)
- Android SAX方式解析XML文件
- android解析xml文件的方式(其三)
- android 用 SAX 解析xml文件!
- (转)ANDROID的MANIFEST.XML文件字段解析
- ANDROID的MANIFEST.XML文件字段解析
- ANDROID的MANIFEST.XML文件字段解析
- Mars Android视频学习笔记——01_20_XML文件解析
- android 用 SAX 解析xml文件!
- android解析xml文件的方式
- android解析xml文件的方式(其二SAX方式)