xml文件的生成(文件生成的时候一定要注意,有开头就有结尾)
public void onClick(View view) { //1创建xml的序列化器 XmlSerializer xmlSerializer = Xml.newSerializer(); /** * 参数一:编码utf-8 * 参数二:当前的xml是否是独立的,填true即可(文档是否独立) */ try { //2创建输出流,把序列化对象向指定的文件中写 FileOutputStream outputStream = MainActivity.this.openFileOutput("aa.xml", MODE_PRIVATE); //序列化器指定输出位置 /** * 参数一:输出流 * 参数二:编码方式 */ xmlSerializer.setOutput(outputStream, "utf-9"); //3写xml的第一行 xmlSerializer.startDocument("utf-8", true); /** * 参数一:命名空间的名字 * 参数二:标签的名字 */ xmlSerializer.startTag(null, "smses"); for (int i = 0; i < 6; i++) { xmlSerializer.startTag(null, "sms"); //短语内容 xmlSerializer.startTag(null, "dody"); xmlSerializer.text("内容");//写文本 xmlSerializer.endTag(null, "body"); //地址 xmlSerializer.startTag(null, "address"); xmlSerializer.text("上海"); xmlSerializer.endTag(null, "address"); //时间 xmlSerializer.text("1993-12-01"); xmlSerializer.startTag(null, "time"); xmlSerializer.endTag(null, "time"); xmlSerializer.endTag(null, "sms"); } //结束标签 xmlSerializer.endTag("null", "smses"); //头标签的结束标签 xmlSerializer.endDocument(); } catch (Exception e) { e.printStackTrace(); } }
二:xml 的解析
xml的解析方式主要有三种(面试题)
1dom 解析:将xml生成一个 树结构,再进行解析
2sax解析:一行一行的解析
3pull 解析:一行一行的解析,适合Android
手动解析xml
//1获取xmlpull 的解析器 XmlPullParser xmlPullParser = Xml.newPullParser(); //2获取要解析的对象 /** * 参数一:要解析文件的流 * 参数二:编码格式 */ try { xmlPullParser.setInput(MainActivity.this.openFileInput("aa.xml"), "utf-8"); int type; while ((type = xmlPullParser.next()) != XmlPullParser.END_DOCUMENT) {//如果向下移动不是xml的document的根节点继续解析 if (type == XmlPullParser.START_DOCUMENT) { //开始解析头文件(解析头文件的时候一般不做操作) } else if (type == XmlPullParser.START_TAG) {//如果是解析到starttag标签 String name = xmlPullParser.getText();//获取当前标签的名字 if (name.equals("smses")) { //创建集合用来存储xml中的对象 lst = new ArrayList<>(); } else if (name.equals("sms")) { //创建实体类 sms = new Smes(); } else if (name.equals("body")) {//实体类赋值 sms.setBody(xmlPullParser.nextText());//xmlPullParser.nextText()通过这个方法获取当标签中值 } else if (name.equals("time")) { sms.setTime(xmlPullParser.nextText()); } else if (name.equals("address")) { sms.setAddress(xmlPullParser.nextText()); } } else if (xmlPullParser.next() == XmlPullParser.END_TAG) { String name = xmlPullParser.getText(); if (name.equals("sms")) { lst.add(sms); } } }