Android中xml的处理
16lz
2021-01-26
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内容的读取,DOM、SAX、dom4j和JDOM。
DOM解析XML是将整个文档存储到内存中,方便多次访问,但是这样就造成了时间和空间的浪费,而且比较占用资源
SAX是事件驱动方式进行XML解析的,不用调入整个文档,减少资源占用,但是使用SAX解析无法做到之久,它只针对当次事件进行解析。
DOM4J则是一款简单易用,极易上手并且性能和功能强大的Java XML API,很多Java开发中都是用DOM4J进行XML解析的。
JDOM底层还是使用SAX、DOM来实现的,但是相对于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); }
更多相关文章
- 两个模拟器之间对发短信
- Android(安卓)Widget开发模板[转]
- Android中webview加载网页无法点击或滚动
- ScrollView嵌套ViewPager,ViewPager内容不显示问题
- [导入]2010-03-02 传智播客—Android(四)数据存储之四ContentProvi
- 怎么定时刷新界面
- Android(安卓)软键盘操作
- android文件的写入与读取---简单的文本读写
- 状态栏提示Notification