最近在项目中需要使用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. [Java I/O] TextFile 工具类

    一种常见的编程任务是,从一个文件读取内容,修改内容,再把内容写到另一个文件里. Java 要实现读取.写入操作,需要创建多个类才能产生一个 Stream 进行操作. 下面是一个简单的工具类,封装对文件 ...

  2. 纯CSS无hacks的跨游览器多列布局

    利用纯CSS创建一个等高多列的布局并不件易事,本教程将着重分析出现在多列布局的多个问题,然后为大家等来一个简单全游览器通吃的解决方法,不使用图片,脚本,CSS hacks并在最严格的XHTML 规范中 ...

  3. jquery 随机数

    var jschars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', ...

  4. Android ProgressBar SeekBar

    1.ProgressBar 进度条 当水平进度条完成后,隐藏该进度条,并显示一张图片 常用属性: 1. android:max 设置进度条的最大值 2. android:progress 用于指定进度 ...

  5. 导出可执行的jar

    1.在你要导出的项目上单击右键,在弹出的右键菜单里选择:Export…选项. 2.在弹出的对话框里选择:,然后点击下边的Next; 3.在弹出的对话框里,点击选择导出后的jar存储路径以及文件名.(其 ...

  6. [AngularJS 2 实践 一]My First Angular App

    最近一直在看关于AngularJS 2的资料,查看了网上和官网很多资料,接下来就根据官网教程步骤一步步搭建我的第一个Angular App AngularJS 2说明请参考:http://cnodej ...

  7. css实现鼠标移上去变大,旋转,转别人的额

    <!doctype html><html><head> <meta charset="utf-8"> <title>CS ...

  8. vmware-tools(vmware workstation 10.0.4)安装的时候遇到的bug

    有个GitHub,专门解决C++编译的时候出的问题 地址

  9. Html.Action、html.ActionLink与Url.Action的区别

    1.html.ActionLink返回的指向指定controller.指定action的超链接标签<a>标签.如果没有指定controller,则默认为本页面对应的Controller. ...

  10. C#操作Office- Cannot find the interop type that matches the embedded interop type 'Microsoft.Office.Interop.Excel.Application'

    网上说 2003 -> 11.0, 2007 -> 12.0. 因为平时提示"Are you missing an assembly reference?",都是没有引 ...