Android修改XML文件
最近在项目中需要使用XML记录数据,网上这方面的文章较少,记录一下
使用DOM方式
- /**
- * 追加内容到XML文档
- * @param instructions
- * @throws ParserConfigurationException
- * @throws SAXException
- * @throws IOException
- * @throws TransformerException
- */
- public void append2XML(String instructions) throws ParserConfigurationException, SAXException, IOException, TransformerException{
- Long st=System.currentTimeMillis();
- String time=DateUtils.getCurrLongTime();
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- //通过实例构建DocumentBuilder
- DocumentBuilder db = dbf.newDocumentBuilder();
- //创建Document 解析给定的文件
- Document doc = db.parse(getInputStream());
- //doc = db.newDocument();
- //添加一个元素
- Element eModel = doc.createElement("instructionsModel");
- Element eInstructions = doc.createElement("instructions");
- Element eCreatetime = doc.createElement("createtime");
- Element eLastUseTime = doc.createElement("lastusetime");
- //在元素中添加文本
- Text textInstructions = doc.createTextNode(instructions);
- Text textCreatetime = doc.createTextNode(time);
- Text textLastUseTime = doc.createTextNode(time);
- eInstructions.appendChild(textInstructions);
- eCreatetime.appendChild(textCreatetime);
- eLastUseTime.appendChild(textLastUseTime);
- //通过Name获取节点 第0个节点
- eModel.appendChild(eInstructions);
- eModel.appendChild(eCreatetime);
- eModel.appendChild(eLastUseTime);
- Node book = doc.getElementsByTagName("instructionsList").item(0);
- book.appendChild(eModel);
- //添加一个属性
- //Attr attr = doc.createAttribute("aaa");
- //创建工厂对象
- TransformerFactory tfs = TransformerFactory.newInstance();
- //创建Transformer对象
- Transformer tf = tfs.newTransformer();
- //将document输出到输出流中。
- tf.transform(new DOMSource(doc),new StreamResult(new FileOutputStream(fu.getSDCardRoot() + File.separator + filePath
- + File.separator +"bb.xml")));
- Long hastime=System.currentTimeMillis()-st;
- Log.i(TAG, "DOM方式耗时:"+hastime);
- }
使用PULL的方式
网上查了很久,好像大家一致认为PULL只能够解析XML,不能够对XML文件进行修改操作
所以我想了一种非常麻烦的修改方法
1.解析原XML文件,得到数据集合
2.将新数据插入到集合中去
3.重新生成XML
代码如下
1.解析XML文件
- /**
- * 获取XML中所有的指令信息
- *
- * @param inputStream
- * @return
- * @throws XmlPullParserException
- * @throws IOException
- */
- private List<Instructions> parseDateSource(InputStream inputStream)
- throws XmlPullParserException, IOException {
- Long st=System.currentTimeMillis();
- List<Instructions> instructionsList = null;
- Instructions instructionsModel = null;
- XmlPullParser parse = Xml.newPullParser();
- parse.setInput(inputStream, "utf-8");
- int event = parse.getEventType();
- while (event != XmlPullParser.END_DOCUMENT) {
- switch (event) {
- case XmlPullParser.START_DOCUMENT:
- instructionsList = new ArrayList<Instructions>();// 初始化指令集合
- break;
- case XmlPullParser.START_TAG:
- if (parse.getName().equals("instructionsModel")) {
- instructionsModel = new Instructions();
- }
- if (instructionsModel != null) {
- if (parse.getName().equals("instructions")) {
- instructionsModel.setInstructions(parse.nextText());
- } else if (parse.getName().equals("createtime")) {
- instructionsModel.setCreateTime(parse.nextText());
- } else if (parse.getName().equals("lastusetime")) {
- instructionsModel.setLastUseTime(parse.nextText());
- }
- }
- break;
- case XmlPullParser.END_TAG:
- if (parse.getName().equals("instructionsModel")) {
- instructionsList.add(instructionsModel);
- instructionsModel = null;
- }
- break;
- default:
- break;
- }
- event = parse.next();// 进入到下一个元素并触发相应事件
- }
- Long hastime=System.currentTimeMillis()-st;
- Log.i(TAG, "PULL方式解析耗时:"+hastime);
- return instructionsList;
- }
2.将数据插入到集合
- /**
- * 将新指令添加到XML文件中
- * @param out
- * @param inputStream
- * @param instructions2
- * @throws IllegalStateException
- * @throws IllegalArgumentException
- * @throws XmlPullParserException
- * @throws IOException
- */
- private void append2xml(OutputStream out, List<Instructions> instructionsList,
- Instructions instructions2) throws IllegalArgumentException, IllegalStateException, IOException, XmlPullParserException
- {
- //避免重复记录指令的操作
- for(int i=0;i<instructionsList.size();i++){
- Instructions instructions=instructionsList.get(i);
- if(instructions.getInstructions().equals(instructions2.getInstructions())){
- instructionsList.remove(i);
- instructions2.setCreateTime(instructions.getCreateTime());
- break;
- }
- }
- instructionsList.add(0, instructions2);
- createInstructionXml(out, instructionsList);
- }
3.生成新的XML文件的方法
- /***
- * 根据列表生成XML文件
- * @param out
- * @param instructionsList
- * @throws IllegalArgumentException
- * @throws IllegalStateException
- * @throws IOException
- */
- private void createInstructionXml(OutputStream out,
- List<Instructions> instructionsList)
- throws IllegalArgumentException, IllegalStateException, IOException {
- // TODO Auto-generated method stub
- XmlSerializer serializer = Xml.newSerializer();
- // 设置文件编码
- serializer.setOutput(out, "UTF-8");
- serializer.startDocument("UTF-8", true);
- serializer.startTag(null, "instructionsList");
- for (Instructions instructions : instructionsList) {
- serializer.startTag(null, "instructionsModel");
- serializer.startTag(null, "instructions");
- serializer.text(instructions.getInstructions());
- serializer.endTag(null, "instructions");
- serializer.startTag(null, "createtime");
- serializer.text(instructions.getCreateTime());
- serializer.endTag(null, "createtime");
- serializer.startTag(null, "lastusetime");
- serializer.text(instructions.getLastUseTime());
- serializer.endTag(null, "lastusetime");
- serializer.endTag(null, "instructionsModel");
- }
- serializer.endTag(null, "instructionsList");
- serializer.endDocument();
- out.flush();
- out.close();
- }
Android修改XML文件的更多相关文章
- 自动帮助创建android资源xml文件的网站
自动帮助创建android资源xml文件的网站 http://android-holo-colors.com/ stack overflow上一个seekbar的例子: http://stackove ...
- Android 修改host文件的3种方法
Android修改hosts文件的方法介绍 本文介绍三种Android手机修改hosts文 件的方法,但修改hosts文件一定要谨慎:Android手机hosts文件的换行符必须是n而不是window ...
- 怎么在android的XML文件里加入凝视
android的XML文件凝视一般採用 <!--凝视内容 -->的方式进行 在XML中,形如 <Button /> 的表示方式,当中&quo ...
- MyEclipse如何修改XML文件默认行宽
1.MyEclipse如何修改XML文件默认行宽 Windows--->Preferences--->搜索xml--->XML--->XML Source--->Form ...
- MyEclipse如何修改XML文件默认打开的编辑器
1.MyEclipse如何修改XML文件默认打开的编辑器 Windows--->Preferences--->General--->Editors--->File Associ ...
- Java 操纵XML之修改XML文件
Java 操纵XML之修改XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...
- android 创建 xml文件
android创建xml文件的方法. 要操作android的外部存储,所以要在AndroidManifest.xml文件中添加权限. <uses-permission android:name= ...
- android解析xml文件的方式
android解析xml文件的方式 作者:东子哥 ,发布于2012-11-26,来源:博客园 在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xm ...
- Java&Xml教程(七)使用JDOM修改XML文件内容
JDOM提供了非常灵活的方式操作XML文件,使用JDOM非常简单而且代码简洁可读性强.前面我们学习了如何使用JDOM解析XML文件,本节介绍如何使用JDOM修改XML文件内容. 在这个教程中,我们准备 ...
随机推荐
- UITabBarController 标签栏控制器
接上篇导航控制器UINavigationController 接下来是UITabBarController 标签栏控制器 先来看一下UITabBarController的结构 从图上可以看出控制器分为 ...
- Java Web开发常见问题
一.Tomcat服务器常见启动问题:(1).Java_home环境变量,由于tomcat服务器的bin目录中的一些jar文件必须使用到java类库,所以必须先配置Java_home环境变量.(2).端 ...
- CodeForces 146E - Lucky Subsequence DP+扩展欧几里德求逆元
题意: 一个数只含有4,7就是lucky数...现在有一串长度为n的数...问这列数有多少个长度为k子串..这些子串不含两个相同的lucky数... 子串的定义..是从这列数中选出的数..只要序号不同 ...
- Linux与JVM的内存关系分析
引言 在一些物理内存为8g的server上,主要执行一个Java服务,系统内存分配例如以下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约600m,Linux自身使用大约800m. 从表面 ...
- 从零开始写一个Tomcat(贰)--建立动态服务器
上文书说道如何通过http协议建立一个静态的服务器来访问静态网页,但我们选择tomcat最主要的原因还是因为它能动态的执行servlet,这边文章将引导你实现一个能够运行servlet的服务器,这个简 ...
- 《C专家编程》之一
一.解决函数返回指针的几种方法 1. 返回一个指向字符串常量的指针. 例子: char* func() { rturn "Only work for simple strings" ...
- C++输出hello world 详细注释
/* #include<iostream> #:预处理标志,后面跟预处理指令,include:预处理指令,包含 <iostream>:c++头文件,输入输出流 这行的作用就是在 ...
- ReSharper warning: Virtual member call in a constructor
1.构造函数的执行顺序是:基类--->派生类 2.如果虚方法被重写后,由于基类中调用了虚方法,此时调用的是最外层的被重写后的虚方法,此时可能会发生异常 举例: class Parent { pu ...
- MVC4 EF linq从客户端中检测到有潜在的危险的Request.Path值
今天做项目的时候遇到了这样的问题贴出来给大家分享下啦, 使用MVC4 EF linq跳转视图的时候出现,从客户端中检测到有潜在的危险的Request.Path值错误,如下图所示: 解决办法如下: r ...
- 《Java编程思想》之重点笔记——多态性理解
Java中除了static方法和final方法(private方法本质上属于final方法,因为不能被子类访问)之外,其它所有的方法都是动态绑定,这意味着通常情况下,我们不必判定是否应该进行动态绑定— ...