XML解析PULL

本文介绍了如何在Android中使用Pull方式创建和解析XML。首先展示了如何利用XmlPullParserFactory和XmlSerializer创建XML文档,包括设置节点和属性。然后详细说明了如何解析XML,包括跟踪XmlPullParser的事件类型,提取节点信息并存储。
摘要由CSDN通过智能技术生成

[java]  [view plain](() [copy](() [print](() [?](()

  1. /** Pull方式,创建 XML  */

  2. public String pullXMLCreate(){

  3. StringWriter xmlWriter = new StringWriter();

  4. Person []persons = new Person[3];       // 创建节点Person对象

  5. persons[0] = new Pers 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 on(1, “sunboy_2050”, “http://blog.csdn.net/sunboy_2050”);

  6. persons[1] = new Person(2, “baidu”, “http://www.baidu.com”);

  7. persons[2] = new Person(3, “google”, “http://www.google.com”);

  8. try {

  9. //          // 方式一:使用Android提供的实用工具类android.util.Xml

  10. //          XmlSerializer xmlSerializer = Xml.newSerializer();

  11. // 方式二:使用工厂类XmlPullParserFactory的方式

  12. XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

  13. XmlSerializer xmlSerializer = factory.newSerializer();

  14. xmlSerializer.setOutput(xmlWriter);             // 保存创建的xml

  15. xmlSerializer.setFeature(“http://xmlpull.org/v1/doc/features.html#indent-output”, true);

  16. //          xmlSerializer.setProperty(“http://xmlpull.org/v1/doc/properties.html#serializer-indentation”, " ");         // 设置属性

  17. //          xmlSerializer.setProperty(“http://xmlpull.org/v1/doc/properties.html#serializer-line-separator”, “\n”);

  18. xmlSerializer.startDocument(“utf-8”, null);     // <?xml version='1.0' encoding='UTF-8' standalone='yes' ?>

  19. xmlSerializer.startTag(“”, “root”);

  20. xmlSerializer.attribute(“”, “author”, “homer”);

  21. xmlSerializer.attribute(“”, “date”, “2012-04-28”);

  22. int personsLen = persons.length;

  23. for(int i=0; i<personsLen; i++) {

  24. xmlSerializer.startTag(“”, “person”);       // 创建person节点

  25. xmlSerializer.startTag(“”, “id”);

  26. xmlSerializer.text(persons[i].getId()+“”);

  27. xmlSerializer.endTag(“”, “id”);

  28. xmlSerializer.startTag(“”, “name”);

  29. xmlSerializer.text(persons[i].getName());

  30. xmlSerializer.endTag(“”, “name”);

  31. xmlSerializer.startTag(“”, “blog”);

  32. xmlSerializer.text(persons[i].getBlog());

  33. xmlSerializer.endTag(“”, “blog”);

  34. xmlSerializer.endTag(“”, “person”);

  35. }

  36. xmlSerializer.endTag(“”, “root”);

  37. xmlSerializer.endDocument();

  38. } catch (XmlPullParserException e) {        // XmlPullParserFactory.newInstance

  39. e.printStackTrace();

  40. } catch (IllegalArgumentException e) {      // xmlSerializer.setOutput

  41. e.printStackTrace();

  42. } catch (IllegalStateException e) {         // xmlSerializer.setOutput

  43. e.printStackTrace();

  44. } catch (IOException e) {       // xmlSerializer.setOutput

  45. e.printStackTrace();

  46. } catch (Exception e) {

  47. e.printStackTrace();

  48. }

  49. savedXML(fileName, xmlWriter.toString());

  50. return xmlWriter.toString();

  51. }

运行结果:

3、Pull 解析 XML

pull方式,解析xml是通过 XmlPullParser 类实现

首先,通过XmlPullParser得到解析xml的实例 xpp

接着,通过 xpp设置输入 xpp.setInput(is, “utf-8”),声明定义保存xml信息的数据结构(如:Person数组)

然后,通过 xpp 解析 START_DOCUMENT、START_TAG、TEXT、END_TAG、END_DOCUMENT等

Code

[java]  [view plain](() [copy](() [print](() [?](()

  1. /** Pull方式,解析 XML  */

  2. public String pullXMLResolve(){

  3. StringWriter xmlWriter = new StringWriter();

  4. InputStream is = readXML(fileName);

  5. try {

  6. //          // 方式一:使用Android提供的实用工具类android.util.Xml

  7. //          XmlPullParser xpp = Xml.newPullParser();

  8. // 方式二:使用工厂类XmlPullParserFactory的方式

  9. XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

  10. XmlPullParser xpp = factory.newPullParser();

  11. xpp.setInput(is, “utf-8”);

  12. List personsList = null;      // 保存xml的person节点

  13. Person person = null;

  14. StringBuffer xmlHeader = null;          // 保存xml头部

  15. String ele = null;      // Element flag

  16. int eventType = xpp.getEventType();

  17. while(XmlPullParser.END_DOCUMENT != eventType) {

  18. switch (eventType) {

  19. case XmlPullParser.START_DOCUMENT:

  20. personsList = new ArrayList();        // 初始化persons

  21. xmlHeader = new StringBuffer();             // 初始化xmlHeader

  22. break;

  23. case XmlPullParser.START_TAG:

  24. if(“root”.equals(xpp.getName())) {

  25. String attrAuthor = xpp.getAttributeValue(0);

  26. String attrDate = xpp.getAttributeValue(1);

  27. xmlHeader.append(“root”).append(“\t\t”);

  28. xmlHeader.append(attrAuthor).append(“\t”);

  29. xmlHeader.append(attrDate).append(“\n”);

  30. } else if(“person”.equals(xpp.getName())) {

  31. person = new Person();          // 创建person实例

  32. } else if(“id”.equals(xpp.getName())) {

  33. ele = “id”;

  34. } else if(“name”.equals(xpp.getName())) {

  35. ele = “name”;

  36. } else if(“blog”.equals(xpp.getName())) {

  37. ele = “blog”;

  38. } else {

  39. ele = null;

  40. }

  41. break;

  42. case XmlPullParser.TEXT:

  43. if(null != ele) {

  44. if(“id”.equals(ele)) {

} else {

  1. ele = null;

  2. }

  3. break;

  4. case XmlPullParser.TEXT:

  5. if(null != ele) {

  6. if(“id”.equals(ele)) {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值