Android中xml的处理

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,这是一个内容导入流,就像一个导管

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

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



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

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

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

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

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

 

来看看常用的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); }

 

 

 

posted @ 2012-08-20 11:44  Tammie-锴  阅读(316)  评论(0编辑  收藏  举报