最近在项目中需要使用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. Jsp 中文乱码,解决

    jsp 乱码 : The time on the server is 2016?2?7? ??10?45?32?. 在 jsp 中,用 jsp 语法添加 utf-8 字符集,可解决此问题 <%@ ...

  2. cocos2dx lua binding ,cocos2dx 绑定lua测试

    前面2篇分别简单介绍 手动bind C++ 类和lua:http://blog.csdn.net/chenee543216/article/details/12074771 使用tolua++简化工作 ...

  3. Java与.net的区别delegate和event

    There is no delegate concept in Java The right-side C# program may be mimiced with reflection techno ...

  4. windows 编程 —— 菜单以及其他资源

    目录: 1.资源的种类 2.资源的定义方法(IDE:VC++) 3.资源的获取 4.资源的使用与消息处理函数   1.资源的种类 windows 的常用的资源包括:图示 .游标. 字符串. 自订资源. ...

  5. leetcode第一刷_Word Ladder II

    这道题非常难. 之前的题目我提到过一次用两个vector来做层序遍历的,就是由于这道题.要想最后恢复出单词变换的路径,就须要事先保存,依据dp中路径恢复的启示,保存的应该是一个单词的前一个变换节点.可 ...

  6. Jetty开发指导:框架

    Spring设置 你能嵌入Jetty到你的项目中,也能够使用差点儿全部的IoC类型框架,包含Spring.假设全部你想做的是在你的Spring中设置Jetty Server,那么以下的xml片段能够作 ...

  7. shell 判断文件、目录是否存在

    shell判断文件是否存在   1. shell判断文件,目录是否存在或者具有权限 2. #!/bin/sh 3. 4. myPath="/var/log/httpd/" 5. m ...

  8. java socker编程

    转自http://haohaoxuexi.iteye.com/blog/1979837 对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户 ...

  9. python 下的数据结构与算法---7:查找

    一:线性查找(Sequential Search) 线性查找可以说是我们用的最早也会是用的最多的查找方式了.其对应的是线性数据结构,回顾一下线性数据结构,其特点是先后加入的元素是有顺序的,相邻的.而线 ...

  10. Asp.Net Mvc MapRoute .html不起作用(转)

    RegisterRoutes 注册路由示例配置: public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRo ...