Android修改XML檔案

來源:互聯網
上載者:User

最近在項目中需要使用XML記錄資料,網上這方面的文章較少,記錄一下

使用DOM方式

/** * 追加內容到XML文檔 * @param instructions * @throws ParserConfigurationException * @throws SAXException * @throws IOException * @throws TransformerException */public void append2XML(String instructions) throws ParserConfigurationException, SAXException, IOException, TransformerException{Long st=System.currentTimeMillis();String time=DateUtils.getCurrLongTime(); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  //通過執行個體構建DocumentBuilder  DocumentBuilder db = dbf.newDocumentBuilder();  //建立Document    解析給定的檔案  Document doc = db.parse(getInputStream());  //doc = db.newDocument();  //添加一個元素  Element eModel = doc.createElement("instructionsModel");  Element eInstructions = doc.createElement("instructions");  Element eCreatetime = doc.createElement("createtime");  Element eLastUseTime = doc.createElement("lastusetime");  //在元素中添加文本  Text textInstructions = doc.createTextNode(instructions);  Text textCreatetime = doc.createTextNode(time);  Text textLastUseTime = doc.createTextNode(time);  eInstructions.appendChild(textInstructions);  eCreatetime.appendChild(textCreatetime);  eLastUseTime.appendChild(textLastUseTime);  //通過Name擷取節點    第0個節點  eModel.appendChild(eInstructions);  eModel.appendChild(eCreatetime);  eModel.appendChild(eLastUseTime);  Node book = doc.getElementsByTagName("instructionsList").item(0);  book.appendChild(eModel);  //添加一個屬性  //Attr attr = doc.createAttribute("aaa");  //建立工廠對象  TransformerFactory tfs = TransformerFactory.newInstance();  //建立Transformer對象  Transformer tf = tfs.newTransformer();  //將document輸出到輸出資料流中。  tf.transform(new DOMSource(doc),new StreamResult(new FileOutputStream(fu.getSDCardRoot() + File.separator + filePath+ File.separator +"bb.xml")));    Long hastime=System.currentTimeMillis()-st;  Log.i(TAG, "DOM方式耗時:"+hastime);}

使用PULL的方式

       網上查了很久,好像大家一致認為PULL只能夠解析XML,不能夠對XML檔案進行修改操作

      所以我想了一種非常麻煩的修改方法

1.解析原XML檔案,得到資料集合

2.將新資料插入到集合中去

3.重建XML

代碼如下

       1.解析XML檔案

/** * 擷取XML中所有的指令資訊 *  * @param inputStream * @return * @throws XmlPullParserException * @throws IOException */private List<Instructions> parseDateSource(InputStream inputStream)throws XmlPullParserException, IOException {Long st=System.currentTimeMillis();List<Instructions> instructionsList = null;Instructions instructionsModel = null;XmlPullParser parse = Xml.newPullParser();parse.setInput(inputStream, "utf-8");int event = parse.getEventType();while (event != XmlPullParser.END_DOCUMENT) {switch (event) {case XmlPullParser.START_DOCUMENT:instructionsList = new ArrayList<Instructions>();// 初始化指令集合break;case XmlPullParser.START_TAG:if (parse.getName().equals("instructionsModel")) {instructionsModel = new Instructions();}if (instructionsModel != null) {if (parse.getName().equals("instructions")) {instructionsModel.setInstructions(parse.nextText());} else if (parse.getName().equals("createtime")) {instructionsModel.setCreateTime(parse.nextText());} else if (parse.getName().equals("lastusetime")) {instructionsModel.setLastUseTime(parse.nextText());}}break;case XmlPullParser.END_TAG:if (parse.getName().equals("instructionsModel")) {instructionsList.add(instructionsModel);instructionsModel = null;}break;default:break;}event = parse.next();// 進入到下一個元素並觸發相應事件} Long hastime=System.currentTimeMillis()-st;  Log.i(TAG, "PULL方式解析耗時:"+hastime);return instructionsList;}

       2.將資料插入到集合

/** * 將新指令添加到XML檔案中 * @param out * @param inputStream * @param instructions2 * @throws IllegalStateException  * @throws IllegalArgumentException  * @throws XmlPullParserException * @throws IOException */private void append2xml(OutputStream out, List<Instructions> instructionsList,Instructions instructions2) throws IllegalArgumentException, IllegalStateException, IOException, XmlPullParserException {//避免重複記錄指令的操作for(int i=0;i<instructionsList.size();i++){Instructions instructions=instructionsList.get(i);if(instructions.getInstructions().equals(instructions2.getInstructions())){instructionsList.remove(i);instructions2.setCreateTime(instructions.getCreateTime());break;}}instructionsList.add(0, instructions2);createInstructionXml(out, instructionsList);}

3.產生新的XML檔案的方法

/*** * 根據列表產生XML檔案 * @param out * @param instructionsList * @throws IllegalArgumentException * @throws IllegalStateException * @throws IOException */private void createInstructionXml(OutputStream out,List<Instructions> instructionsList)throws IllegalArgumentException, IllegalStateException, IOException {// TODO Auto-generated method stubXmlSerializer serializer = Xml.newSerializer();// 設定檔案編碼serializer.setOutput(out, "UTF-8");serializer.startDocument("UTF-8", true);serializer.startTag(null, "instructionsList");for (Instructions instructions : instructionsList) {serializer.startTag(null, "instructionsModel");serializer.startTag(null, "instructions");serializer.text(instructions.getInstructions());serializer.endTag(null, "instructions");serializer.startTag(null, "createtime");serializer.text(instructions.getCreateTime());serializer.endTag(null, "createtime");serializer.startTag(null, "lastusetime");serializer.text(instructions.getLastUseTime());serializer.endTag(null, "lastusetime");serializer.endTag(null, "instructionsModel");}serializer.endTag(null, "instructionsList");serializer.endDocument();out.flush();out.close();}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.