继续弄我们聊天的小软件,尝试用XML来存储聊天记录。不过最终是放弃了,选择使用SQLite来存储记录,(见http://www.linuxidc.com/Linux/2012-01/50683.htm )这是后话了……先把XML的存储与解析的代码放来把(网上有很多,这儿就是小魏自己复习总结一下)XMl存储使用XML序列化对象XmlSerializer,看代码就知道怎么写,很简单:
- private ChatInfo info;
- public String FirstWriteXml(){
- XmlSerializer serializer = Xml.newSerializer();
- StringWriter writer = new StringWriter();
- try{
- serializer.setOutput(writer);
-
- // <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- serializer.startDocument("UTF-8",true);
- serializer.text("
");
- // System.out.println("<?xml version="1.0" encoding="UTF-8" standalone="yes"?> ");
-
- serializer.startTag("","chatlog");
- serializer.text("
");
-
- serializer.startTag("","chatinfo");
- serializer.text("
");
- // System.out.println("<chatinfo>");
-
- //<name>小魏</name>
- serializer.text(" ");
- serializer.startTag("","name");
- serializer.text(info.getChatName().toString());
- serializer.endTag("","name");
- serializer.text("
");
- // System.out.println("<name>"+info.getChatName()+"</name");
-
- //<time>2011-11-27 20:00</time>
- serializer.text(" ");
- serializer.startTag("","time");
- serializer.text(info.getChatTime().toString());
- serializer.endTag("","time");
- serializer.text("
");
- // System.out.println("<name>"+info.getChatTime()+"</name");
-
- //<info>Hi~~~</info>
- serializer.text(" ");
- serializer.startTag("","info");
- serializer.text(info.getChatString().toString());
- serializer.endTag("","info");
- serializer.text("
");
- // System.out.println("<name>"+info.getChatString()+"</name");
-
- // </chatinfo>
- serializer.endTag("","chatinfo");
- serializer.text("
");
- // System.out.println("</chatinfo> ");
-
- serializer.endTag("","chatlog");
- serializer.text("
");
- // System.out.println("</chatinfo> ");
- serializer.endDocument();
-
-
- return writer.toString();
- }
- catch(Exception e)
- {
- throw new RuntimeException(e);
- }
-
- }
写出来的效果如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <chatlog>
- <chatinfo>
- <name>小魏</name>
- <time>2011-11-27 20:00</time>
- <info>Hi~~~</info>
- </chatinfo>
- </chatlog>
这里需要注意,<chatlog>这个标签是必须的,因为xml里一定要有一颗主树,如果有多条记录,但是没有最外这层结构,比如下面的例子有多条记录:
- <?xml version="1.0" encoding="UTF-8"?>
- <chatinfo>
- <name>小魏</name>
- <time>2011-11-27 20:00</time>
- <info>Hi~~~</info>
- </chatinfo>
- <chatinfo>
- <name>我</name>
- <time>2011-11-27 20:01</time>
- <info>你好!</info>
- </chatinfo>
- <chatinfo>
- <name>小魏</name>
- <time>2011-11-27 20:02</time>
- <info>聊天模块终于搞完了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!</info>
- </chatinfo>
- <chatinfo>
- <name>我</name>
- <time>2011-11-27 20:02</time>
- <info>太好啦!</info>
- </chatinfo>
使用SAXParserFactory解析时,解析玩第一条记录就会停止,而且会报错: