用pull解析器 生成xml文件

有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中;或者使用DOM API生成XML文件,或者也可以使用pull解析器生成XML文件,这里推荐大家使用Pull解析器。

       使用Pull解析器生成一个与 android .xml文件内容相同的myandroid.xml文件,代码在本页下方备注
       使用代码如下(生成XML文件):

java代码:
  1. File xmlFile = new File("myandroid.xml");
  2. FileOutputStream outStream = new FileOutputStream(xmlFile);
  3. OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
  4. BufferedWriter writer = new BufferedWriter(outStreamWriter);
  5. writeXML(persons, writer);
  6. writer.flush();
  7. writer.close();
复制代码
如果只想得到生成的xml字符串内容,可以使用StringWriter:

java代码:
  1. StringWriter writer = new StringWriter();
  2. writeXML(persons, writer);
  3. String content = writer.toString();
  4. public static String writeXML(List<Person> persons, Writer writer){
  5. XmlSerializer serializer = Xml.newSerializer();
  6. try {
  7. serializer.setOutput(writer);
  8. serializer.startDocument("UTF-8", true);
  9. //第一个参数为命名空间,如果不使用命名空间,可以设置为null
  10. serializer.startTag("", "persons");
  11. for (Person person : persons){
  12. serializer.startTag("", "person");
  13. serializer.attribute("", "id", person.getId().toString());
  14. serializer.startTag("", "name");
  15. serializer.text(person.getName());
  16. serializer.endTag("", "name");
  17. serializer.startTag("", "age");
  18. serializer.text(person.getAge().toString());
  19. serializer.endTag("", "age");
  20. serializer.endTag("", "person");
  21. }
  22. serializer.endTag("", "persons");
  23. serializer.endDocument();
  24. return writer.toString();
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. }
  28. return null;
  29. }
除了可以使用 SAX和DOM解析XML文件,大家也可以使用 Android 内置的Pull解析器解析XML文件。 Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值。

java代码:
  1. public class PullXMLReader {
  2. public static List<Person> readXML(InputStream inStream) {
  3. XmlPullParser parser = Xml.newPullParser();
  4. try {
  5. parser.setInput(inStream, "UTF-8");
  6. int eventType = parser.getEventType();
  7. Person currentPerson = null;
  8. List<Person> persons = null;
  9. while (eventType != XmlPullParser.END_DOCUMENT) {
  10. switch (eventType) {
  11. case XmlPullParser.START_DOCUMENT://文档开始事件,可以进行数据初始化处理
  12. persons = new ArrayList<Person>();
  13. break;
  14. case XmlPullParser.START_TAG://开始元素事件
  15. String name = parser.getName();
  16. if (name.equalsIgnoreCase("person")) {
  17. currentPerson = new Person();
  18. currentPerson.setId(new Integer(parser.getAttributeValue(null, "id")));
  19. } else if (currentPerson != null) {
  20. if (name.equalsIgnoreCase("name")) {
  21. currentPerson.setName(parser.nextText());// 如果后面是Text元素,即返回它的值
  22. } else if (name.equalsIgnoreCase("age")) {
  23. currentPerson.setAge(new Short(parser.nextText()));
  24. }
  25. }
  26. break;
  27. case XmlPullParser.END_TAG://结束元素事件
  28. if (parser.getName().equalsIgnoreCase("person") && currentPerson != null) {
  29. persons.add(currentPerson);
  30. currentPerson = null;
  31. }
  32. break;
  33. }
  34. eventType = parser.next();
  35. }
  36. inStream.close();
  37. return persons;
  38. } catch (Exception e) {
  39. e.printStackTrace();
  40. }
  41. return null;
  42. }
  43. }

你可能感兴趣的:(用pull解析器 生成xml文件)