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文件内容. 在这个教程中,我们准备 ...
随机推荐
- iOS音频处理
ios音频处理 1. iOS底层音频处理技术(带源代码) http://www.cocoachina.com/ios/20111122/3563.html 2.ios 音频入门 http://blog ...
- <一>初探js特效魅力之选项卡05
初探js特效魅力05 接下来为大家介绍的选项卡的切换 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&quo ...
- python_Opencv_读取视频
目标 • 学会读取视频文件,显示视频,保存视频文件 • 学会从摄像头获取并显示视频 • 你将会学习到这些函数:cv2.VideoCapture(),cv2.VideoWrite()用摄像头捕获视频 使 ...
- 一、进程与信号之exec函数system函数
exec函数: 子进程调用exec函数执行另一个程序,exec函数进程完全由新程序代替,替换原有程序正文,数据,堆,栈段 #include <unistd.h> extern char * ...
- C# 我是个传奇的 using
呵呵呵: ----------------------------------------------------------------------------------------------- ...
- Bloom Filter概念和原理
Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合.Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某 ...
- Ubuntu Server安全Webserver搭建流程
之前整过CentOS.整了Ubuntu才发现,Ubuntu简单多了--不知道性能相比又怎样. 以Ubtuntu 14.04为例.记录一下搭建流程. 一.SSHserver 第一件事当然是ssh,默认安 ...
- LSI MegaCli 命令使用4
Dell服务器常用管理命令总结准备新版本的 MegaCli-1.01.24-0.i386.rpm 会把程序安装在/opt下,可以自定义安装目录,例如:rpm --relocate /opt/=/usr ...
- jQuery幻灯插件:Nivo Slider
使用步骤 1.引入css文件 default.css 设置展示插件所需的样式,像控制导航键,导航按钮样式,当然你可以自己写个样式 nivo-slider控制图片样式,插件所需的CSS文件 <li ...
- Eclipse 运行ant build.xml
在命令行cmd运行mvn clean install,ant compiler,提示上述信息,是因为 maven的这个插件要求jdk1.6,但是本地电脑环境变量jdk版本为1.7.将JAVA_HOME ...