xml文件通过程序进行新建、载入、读取等处理的方式。

这里使用的代码都是魏祝林老师的,我只是拿来学习分析的,不是原创的。

先来看看xml的新建步骤:

  private void createXmlFile(){          File linceseFile = new File(BOOKS_PATH);  //一个瓶子,指定路径        linceseFile.createNewFile();  //放好瓶子        FileOutputStream fileos= new FileOutputStream(linceseFile);  //插好导管        XmlSerializer serializer = Xml.newSerializer();  //准备好碎片,存放内容        try {              serializer.setOutput(fileos,"UTF-8");   //xml标准开头            serializer.startDocument(null, true);  //开始内容            serializer.startTag(null, "books");                for(int i = 0; i < 3; i ++){                  serializer.startTag(null, "book");                  serializer.startTag(null, "bookname");                  serializer.text("Android教程" + i);                  serializer.endTag(null, "bookname");                  serializer.startTag(null, "bookauthor");                  serializer.text("Frankie" + i);                  serializer.endTag(null, "bookauthor");                  serializer.endTag(null, "book");              }                        serializer.endTag(null, "books");              serializer.endDocument();     //写完内容            serializer.flush();       //放进导管中            fileos.close();   //拔去导管        } catch (Exception e) {              Log.e("Exception","error occurred while creating xml file");          }          Toast.makeText(getApplicationContext(), "创建xml文件成功!", Toast.LENGTH_SHORT).show();      }  

先用这样一个例子来看看:

1先建立一个file,这是一个内容存放的容器,就像一个瓶子

2建立一个FileOutputStream,这是一个内容导入流,就像一个导管

3XmlSerializer就是一个序列化的内容,就像一个内容碎片

所以一个基本的步骤就是,先找个瓶子,并指定瓶子的存放位置;给瓶子做个引流管;做一个碎片写上内容;把碎片导入导管中;把走导管一切结束



再来看看xml内容的读取,DOMSAXdom4jJDOM。

DOM解析XML将整个文档存储到内存中,方便多次访问,但是这样就造成了时间和空间的浪费,而且比较占用资源

SAX是事件驱动方式进行XML解析的,不用调入整个文档,减少资源占用,但是使用SAX解析无法做到之久,它只针对当次事件进行解析。

DOM4J则是一款简单易用,极易上手并且性能和功能强大Java XML API,很多Java开发中都是用DOM4J进行XML解析的。

JDOM底层还是使用SAXDOM来实现的,但是相对于DOMSAX大大减少了代码量。

来看看常用的dom与XmlPullParser方法

先来看看dom方式的:

private void domParseXML(){          File file = new File(BOOKS_PATH);   //找到瓶子了        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  //拼装碎片的工具箱          DocumentBuilder db = null;            try {              db = dbf.newDocumentBuilder();  //拼装工具        } catch (ParserConfigurationException e) {              e.printStackTrace();          }          Document doc = null;  //拼装模型,就像钻头一样        try {              doc = db.parse(file);  //把模型装好到瓶子上        } catch (SAXException e) {              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();          }          Element root = doc.getDocumentElement();  //模型就可以用来把瓶里的东西按照一定顺序规则倒出来了        NodeList books = root.getElementsByTagName("book");          String res = "本结果是通过dom解析:" + "/n";          for(int i = 0; i < books.getLength();i++){              Element book = (Element)books.item(i);              Element bookname = (Element)book.getElementsByTagName("bookname").item(0);              Element bookauthor = (Element)book.getElementsByTagName("bookauthor").item(0);              res += "书名: " + bookname.getFirstChild().getNodeValue() + " " +                     "作者: " + bookauthor.getFirstChild().getNodeValue() + "/n";          }                    mTextView.setText(res);      }  

这里Dom对于xml的解读,用到了file、DocumentBuilderFactory、DocumentBuilder、Document

        File file = new File(BOOKS_PATH); //读取文件路径        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  //新建个工厂        DocumentBuilder db = dbf.newDocumentBuilder();          Document doc = db.parse(file);         Element root = doc.getDocumentElement();  

再来看看XmlPullParse的使用

    private void xmlPullParseXML(){          String res = "本结果是通过XmlPullParse解析:" + "/n";          try {                         XmlPullParserFactory factory = XmlPullParserFactory.newInstance();              XmlPullParser xmlPullParser = factory.newPullParser();                            xmlPullParser.setInput(Thread.currentThread().getContextClassLoader()                      .getResourceAsStream(BOOKS_PATH), "UTF-8");   //这里不像Dom去file一下文件,然后再放进去
//XmlPullParser通过一个线程进行数据的载入
int eventType = xmlPullParser.getEventType(); try{ while (eventType != XmlPullParser.END_DOCUMENT) { String nodeName = xmlPullParser.getName(); switch (eventType) { case XmlPullParser.START_TAG: if("bookname".equals(nodeName)){ res += "书名: " + xmlPullParser.nextText() + " "; }else if("bookauthor".equals(nodeName)){ res += "作者: " + xmlPullParser.nextText() + "/n"; } break; default: break; } eventType = xmlPullParser.next(); } } catch (IOException e) { e.printStackTrace(); } } catch (XmlPullParserException e) { e.printStackTrace(); } mTextView.setText(res); }

更多相关文章

  1. 两个模拟器之间对发短信
  2. Android(安卓)Widget开发模板[转]
  3. Android中webview加载网页无法点击或滚动
  4. ScrollView嵌套ViewPager,ViewPager内容不显示问题
  5. [导入]2010-03-02 传智播客—Android(四)数据存储之四ContentProvi
  6. 怎么定时刷新界面
  7. Android(安卓)软键盘操作
  8. android文件的写入与读取---简单的文本读写
  9. 状态栏提示Notification

随机推荐

  1. android 服务与多线程
  2. Service
  3. Android之Http请求基础
  4. android camera preview方向
  5. Android创建文件夹及文件并写入数据
  6. Android(安卓)杀掉自己进程的方法
  7. android按键 禁用
  8. Android(安卓)调用shell命令打印
  9. android 混淆打包后 Gson拿到的实体类转
  10. Android图片旋转,缩放,移位,倾斜,对称