Android学习笔记之XML存储


继续弄我们聊天的小软件,尝试用XML来存储聊天记录。

不过最终是放弃了,选择使用SQLite来存储记录,(见 )这是后话了……

先把XML的存储与解析的代码放来把(网上有很多,这儿就是小魏自己复习总结一下)

XMl存储使用XML序列化对象XmlSerializer,看代码就知道怎么写,很简单:

  1. private ChatInfo info;  
  2.     public String FirstWriteXml(){  
  3.         XmlSerializer serializer = Xml.newSerializer();    
  4.         StringWriter writer = new StringWriter();    
  5.         try{    
  6.         serializer.setOutput(writer);    
  7.            
  8.         // <?xml version="1.0" encoding="UTF-8" standalone="yes"?>     
  9.         serializer.startDocument("UTF-8",true);    
  10.         serializer.text("\n");  
  11. //      System.out.println("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?> ");   
  12.           
  13.         serializer.startTag("","chatlog");    
  14.         serializer.text("\n");  
  15.           
  16.         serializer.startTag("","chatinfo");    
  17.         serializer.text("\n");  
  18. //      System.out.println("<chatinfo>");   
  19.   
  20.         //<name>小魏</name>   
  21.         serializer.text("\t");  
  22.         serializer.startTag("","name");    
  23.         serializer.text(info.getChatName().toString());    
  24.         serializer.endTag("","name");    
  25.         serializer.text("\n");  
  26. //      System.out.println("<name>"+info.getChatName()+"</name");   
  27.           
  28.         //<time>2011-11-27 20:00</time>   
  29.         serializer.text("\t");  
  30.         serializer.startTag("","time");    
  31.         serializer.text(info.getChatTime().toString());    
  32.         serializer.endTag("","time");    
  33.         serializer.text("\n");  
  34. //      System.out.println("<name>"+info.getChatTime()+"</name");   
  35.            
  36.         //<info>Hi~~~</info>   
  37.         serializer.text("\t");  
  38.         serializer.startTag("","info");    
  39.         serializer.text(info.getChatString().toString());    
  40.         serializer.endTag("","info");  
  41.         serializer.text("\n");  
  42. //      System.out.println("<name>"+info.getChatString()+"</name");   
  43.           
  44.         // </chatinfo>     
  45.         serializer.endTag("","chatinfo");  
  46.         serializer.text("\n");  
  47. //      System.out.println("</chatinfo> ");   
  48.           
  49.         serializer.endTag("","chatlog");  
  50.         serializer.text("\n");  
  51. //      System.out.println("</chatinfo> ");   
  52.         serializer.endDocument();  
  53.           
  54.           
  55.         return writer.toString();    
  56.     }    
  57.         catch(Exception e)    
  58.         {    
  59.             throw new RuntimeException(e);    
  60.         }    
  61.           
  62.     }  
写出来的效果如下:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <chatlog>  
  3. <chatinfo>  
  4. <name>小魏</name>  
  5. <time>2011-11-27 20:00</time>  
  6. <info>Hi~~~</info>  
  7. </chatinfo>  
  8. </chatlog>  
这里需要注意,<chatlog>这个标签是必须的,因为xml里一定要有一颗主树,如果有多条记录,但是没有最外这层结构,比如下面的例子有多条记录:
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <chatinfo>  
  3. <name>小魏</name>  
  4. <time>2011-11-27 20:00</time>  
  5. <info>Hi~~~</info>  
  6. </chatinfo>  
  7. <chatinfo>  
  8. <name></name>  
  9. <time>2011-11-27 20:01</time>  
  10. <info>你好!</info>  
  11. </chatinfo>  
  12. <chatinfo>  
  13. <name>小魏</name>  
  14. <time>2011-11-27 20:02</time>  
  15. <info>聊天模块终于搞完了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!</info>  
  16. </chatinfo>  
  17. <chatinfo>  
  18. <name></name>  
  19. <time>2011-11-27 20:02</time>  
  20. <info>太好啦!</info>  
  21. </chatinfo>  

使用SAXParserFactory解析时,解析玩第一条记录就会停止,而且会报错:

相关内容