最近在项目中需要使用XML记录数据,网上这方面的文章较少,记录一下

使用DOM方式

  1. /**
  2. * 追加内容到XML文档
  3. * @param instructions
  4. * @throws ParserConfigurationException
  5. * @throws SAXException
  6. * @throws IOException
  7. * @throws TransformerException
  8. */
  9. public void append2XML(String instructions) throws ParserConfigurationException, SAXException, IOException, TransformerException{
  10. Long st=System.currentTimeMillis();
  11. String time=DateUtils.getCurrLongTime();
  12. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  13. //通过实例构建DocumentBuilder
  14. DocumentBuilder db = dbf.newDocumentBuilder();
  15. //创建Document    解析给定的文件
  16. Document doc = db.parse(getInputStream());
  17. //doc = db.newDocument();
  18. //添加一个元素
  19. Element eModel = doc.createElement("instructionsModel");
  20. Element eInstructions = doc.createElement("instructions");
  21. Element eCreatetime = doc.createElement("createtime");
  22. Element eLastUseTime = doc.createElement("lastusetime");
  23. //在元素中添加文本
  24. Text textInstructions = doc.createTextNode(instructions);
  25. Text textCreatetime = doc.createTextNode(time);
  26. Text textLastUseTime = doc.createTextNode(time);
  27. eInstructions.appendChild(textInstructions);
  28. eCreatetime.appendChild(textCreatetime);
  29. eLastUseTime.appendChild(textLastUseTime);
  30. //通过Name获取节点    第0个节点
  31. eModel.appendChild(eInstructions);
  32. eModel.appendChild(eCreatetime);
  33. eModel.appendChild(eLastUseTime);
  34. Node book = doc.getElementsByTagName("instructionsList").item(0);
  35. book.appendChild(eModel);
  36. //添加一个属性
  37. //Attr attr = doc.createAttribute("aaa");
  38. //创建工厂对象
  39. TransformerFactory tfs = TransformerFactory.newInstance();
  40. //创建Transformer对象
  41. Transformer tf = tfs.newTransformer();
  42. //将document输出到输出流中。
  43. tf.transform(new DOMSource(doc),new StreamResult(new FileOutputStream(fu.getSDCardRoot() + File.separator + filePath
  44. + File.separator +"bb.xml")));
  45. Long hastime=System.currentTimeMillis()-st;
  46. Log.i(TAG, "DOM方式耗时:"+hastime);
  47. }

使用PULL的方式

网上查了很久,好像大家一致认为PULL只能够解析XML,不能够对XML文件进行修改操作

所以我想了一种非常麻烦的修改方法

1.解析原XML文件,得到数据集合

2.将新数据插入到集合中去

3.重新生成XML

代码如下

1.解析XML文件

  1. /**
  2. * 获取XML中所有的指令信息
  3. *
  4. * @param inputStream
  5. * @return
  6. * @throws XmlPullParserException
  7. * @throws IOException
  8. */
  9. private List<Instructions> parseDateSource(InputStream inputStream)
  10. throws XmlPullParserException, IOException {
  11. Long st=System.currentTimeMillis();
  12. List<Instructions> instructionsList = null;
  13. Instructions instructionsModel = null;
  14. XmlPullParser parse = Xml.newPullParser();
  15. parse.setInput(inputStream, "utf-8");
  16. int event = parse.getEventType();
  17. while (event != XmlPullParser.END_DOCUMENT) {
  18. switch (event) {
  19. case XmlPullParser.START_DOCUMENT:
  20. instructionsList = new ArrayList<Instructions>();// 初始化指令集合
  21. break;
  22. case XmlPullParser.START_TAG:
  23. if (parse.getName().equals("instructionsModel")) {
  24. instructionsModel = new Instructions();
  25. }
  26. if (instructionsModel != null) {
  27. if (parse.getName().equals("instructions")) {
  28. instructionsModel.setInstructions(parse.nextText());
  29. } else if (parse.getName().equals("createtime")) {
  30. instructionsModel.setCreateTime(parse.nextText());
  31. } else if (parse.getName().equals("lastusetime")) {
  32. instructionsModel.setLastUseTime(parse.nextText());
  33. }
  34. }
  35. break;
  36. case XmlPullParser.END_TAG:
  37. if (parse.getName().equals("instructionsModel")) {
  38. instructionsList.add(instructionsModel);
  39. instructionsModel = null;
  40. }
  41. break;
  42. default:
  43. break;
  44. }
  45. event = parse.next();// 进入到下一个元素并触发相应事件
  46. }
  47. Long hastime=System.currentTimeMillis()-st;
  48. Log.i(TAG, "PULL方式解析耗时:"+hastime);
  49. return instructionsList;
  50. }

2.将数据插入到集合

  1. /**
  2. * 将新指令添加到XML文件中
  3. * @param out
  4. * @param inputStream
  5. * @param instructions2
  6. * @throws IllegalStateException
  7. * @throws IllegalArgumentException
  8. * @throws XmlPullParserException
  9. * @throws IOException
  10. */
  11. private void append2xml(OutputStream out, List<Instructions> instructionsList,
  12. Instructions instructions2) throws IllegalArgumentException, IllegalStateException, IOException, XmlPullParserException
  13. {
  14. //避免重复记录指令的操作
  15. for(int i=0;i<instructionsList.size();i++){
  16. Instructions instructions=instructionsList.get(i);
  17. if(instructions.getInstructions().equals(instructions2.getInstructions())){
  18. instructionsList.remove(i);
  19. instructions2.setCreateTime(instructions.getCreateTime());
  20. break;
  21. }
  22. }
  23. instructionsList.add(0, instructions2);
  24. createInstructionXml(out, instructionsList);
  25. }

3.生成新的XML文件的方法

    1. /***
    2. * 根据列表生成XML文件
    3. * @param out
    4. * @param instructionsList
    5. * @throws IllegalArgumentException
    6. * @throws IllegalStateException
    7. * @throws IOException
    8. */
    9. private void createInstructionXml(OutputStream out,
    10. List<Instructions> instructionsList)
    11. throws IllegalArgumentException, IllegalStateException, IOException {
    12. // TODO Auto-generated method stub
    13. XmlSerializer serializer = Xml.newSerializer();
    14. // 设置文件编码
    15. serializer.setOutput(out, "UTF-8");
    16. serializer.startDocument("UTF-8", true);
    17. serializer.startTag(null, "instructionsList");
    18. for (Instructions instructions : instructionsList) {
    19. serializer.startTag(null, "instructionsModel");
    20. serializer.startTag(null, "instructions");
    21. serializer.text(instructions.getInstructions());
    22. serializer.endTag(null, "instructions");
    23. serializer.startTag(null, "createtime");
    24. serializer.text(instructions.getCreateTime());
    25. serializer.endTag(null, "createtime");
    26. serializer.startTag(null, "lastusetime");
    27. serializer.text(instructions.getLastUseTime());
    28. serializer.endTag(null, "lastusetime");
    29. serializer.endTag(null, "instructionsModel");
    30. }
    31. serializer.endTag(null, "instructionsList");
    32. serializer.endDocument();
    33. out.flush();
    34. out.close();
    35. }

Android修改XML文件的更多相关文章

  1. 自动帮助创建android资源xml文件的网站

    自动帮助创建android资源xml文件的网站 http://android-holo-colors.com/ stack overflow上一个seekbar的例子: http://stackove ...

  2. Android 修改host文件的3种方法

    Android修改hosts文件的方法介绍 本文介绍三种Android手机修改hosts文 件的方法,但修改hosts文件一定要谨慎:Android手机hosts文件的换行符必须是n而不是window ...

  3. 怎么在android的XML文件里加入凝视

    android的XML文件凝视一般採用 <!--凝视内容 -->的方式进行 在XML中,形如    <Button           />      的表示方式,当中&quo ...

  4. MyEclipse如何修改XML文件默认行宽

    1.MyEclipse如何修改XML文件默认行宽 Windows--->Preferences--->搜索xml--->XML--->XML Source--->Form ...

  5. MyEclipse如何修改XML文件默认打开的编辑器

    1.MyEclipse如何修改XML文件默认打开的编辑器 Windows--->Preferences--->General--->Editors--->File Associ ...

  6. Java 操纵XML之修改XML文件

    Java 操纵XML之修改XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...

  7. android 创建 xml文件

    android创建xml文件的方法. 要操作android的外部存储,所以要在AndroidManifest.xml文件中添加权限. <uses-permission android:name= ...

  8. android解析xml文件的方式

    android解析xml文件的方式   作者:东子哥 ,发布于2012-11-26,来源:博客园   在androd手机中处理xml数据时很常见的事情,通常在不同平台传输数据的时候,我们就可能使用xm ...

  9. Java&Xml教程(七)使用JDOM修改XML文件内容

    JDOM提供了非常灵活的方式操作XML文件,使用JDOM非常简单而且代码简洁可读性强.前面我们学习了如何使用JDOM解析XML文件,本节介绍如何使用JDOM修改XML文件内容. 在这个教程中,我们准备 ...

随机推荐

  1. 《SDN核心技术剖析和实战指南》3.3读书笔记

    这一节主要是介绍几种开源的SDN控制器. NOX/POX.最初的NOX混合了C++和Python两种编程语言,现在演变为两个版本.NOX版本主要面向Linux平台,利用C++开发,目标是提供快速的控制 ...

  2. 西装定制平台Indochino获$1350万B轮融资 - 国际B2C - 亿邦动力网

    西装定制平台Indochino获$1350万B轮融资 - 国际B2C - 亿邦动力网 西装定制平台Indochino获$1350万B轮融资 作者: 韦龑来源: i黑马网2013-03-29 11:05 ...

  3. mysql查询最近一小时的数据

    date_sub()函数: DATE_SUB(date,INTERVAL expr type) 实例: SELECT NOW(),DATE_SUB(NOW(),INTERVAL HOUR) as th ...

  4. wxPython学习笔记(初识)

    今天正式开始学习wxPython,基于对类的不熟悉,理解有点生硬,但还是做了些笔记. 1.是什么组成了一个wxpython程序? 一个wxpython程序必须有一个application(wx.App ...

  5. jQuery Ajax 的 load()方式

     load() 方法 load() 是所有jQuery工具中最简单的,向它传入一个URL,它会异步加载URL内的内容,然后将内容插入每一个选中元素中,替换掉已经存在的任何内容. 例如 $(" ...

  6. UML的六种关系

    UML定义的关系主要有:泛化.实现.依赖.关联.聚合.组合,这六种关系紧密程度依次加强,分别看一下 泛化 概念:泛化是一种一般与特殊.一般与具体之间关系的描述,具体描述建立在一般描述的基础之上,并对其 ...

  7. OpenStack Summit Paris 会议纪要 - 11-04-2014

    前言: 来源:https://wiki.openstack.org/wiki/Summit/Kilo/Etherpads#Ops 不一定翻译准.由于是在summit上随手写的. 重点关注Ops Sum ...

  8. hduTHE MATRIX PROBLEM(差分约束)

    题目请戳这里 题目大意:给一个n*m的矩阵,求是否存在这样两个序列:a1,a2...an,b1,b2,...,bm,使得矩阵的第i行乘以ai,第j列除以bj后,矩阵的每一个数都在L和U之间. 题目分析 ...

  9. C++获得系统路径

    源码: [cpp] view plaincopy #include <Shlobj.h> #include <stdio.h> #include <locale.h> ...

  10. [置顶] hdu 1890 伸展树区间翻转

    题意: 给你n个数,每次先输出第i大的数的位置(如果有多个,选下标小的那个),然后每次将第i个位置到第i大的数所在位置之间的数进行翻转. 思路:输入的数组可能有多个相同的值,我们可以进行两次排序把数组 ...