android面试题总结02 在android中本地写入一个xml文件

来源:互联网 发布:淘宝一元拍卖的玉真假 编辑:程序博客网 时间:2024/06/08 04:30

上次去面试一家做framework层的公司,问到了很多java基础,还有怎么在android本地用java写一个xml。

然后想了半天想起来看黑马视频里学过XmlSerializer这个xml序列化工具,然后我就回答有个XML序列化工具,然后里面有setTag方法(这个其实应该是startTag)

反正就是回答的很不清楚,然后面试官说可以理解,毕竟这个不常用,我知道你知道,用过就行了,就这样过了。后来回来查了一下源码,具体在android中写一个

xml文件代码如下:

XmlSerializer serializer = Xml.newSerializer();// 创建Xmlserializer的对象// 指定序列化对象输出的流FileOutputStream fos = new FileOutputStream("/mnt/sdcard/person.xml");serializer.setOutput(fos, "utf-8");serializer.startDocument("utf-8", true);// 写xml头serializer.startTag(null, "persons");// 开始的根节点for (Person person : personList) {serializer.startTag(null, "person");serializer.attribute(null, "id", String.valueOf(person.getId()));// 写人的姓名serializer.startTag(null, "name");serializer.text(person.getName());serializer.endTag(null, "name");// 写人的年龄serializer.startTag(null, "age");serializer.text(String.valueOf(person.getAge()));serializer.endTag(null, "age");serializer.endTag(null, "person");


另外解析刚才的xml文件

// 创建Pull解析器对象XmlPullParser parser = Xml.newPullParser();// 指定解析的文件FileInputStream fis = new FileInputStream("/mnt/sdcard/person.xml");parser.setInput(fis, "UTF-8");int eventType = parser.getEventType();// 获得解析器的第一个事件类型 List<Person> personList = null;Person person = null;String name;while(eventType != XmlPullParser.END_DOCUMENT) {// 如果事件类型不等于结束的类型, 继续循环String tagName = parser.getName();// 获得当前节点的名称// 解析数据switch (eventType) {case XmlPullParser.START_TAG:// 代表开始节点 <persons>if("persons".equals(tagName)) {// 初始化集合personList = new ArrayList<Person>();} else if("person".equals(tagName)) {person = new Person();person.setId(Integer.valueOf(parser.getAttributeValue(null, "id")));} else if("name".equals(tagName)) {name = parser.nextText();// 当前是<name> 节点 nextText是取<name> 后边的值person.setName(name);} else if("age".equals(tagName)) {person.setAge(Integer.parseInt(parser.nextText()));}break;case XmlPullParser.END_TAG:// 代表结束节点 </person>if("person".equals(tagName)) {// 当前是</person>// 把上面person的对象添加到集合中personList.add(person);}break;default:break;}eventType = parser.next();// 赋值下一个事件类型}




0 0