天天看點

AndRoid XmlPullParser

一 操作的XML格式

 xml version='1.0' encoding='UTF-8' standalone='yes' ?>

<books>

<book id="1">

<name>大唐雙龍傳</name>

<path>1</path>

<size>0.0</size>

<label>0</label>

<font_type>0</font_type>

<font_color>0</font_color>

<font_size>0</font_size>

</book>

<book id="2">

<name>射雕英雄傳</name>

<path>2</path>

<size>0.0</size>

<label>0</label>

<font_type>0</font_type>

<font_color>0</font_color>

<font_size>0</font_size>

</book>

<book id="3">

<name>猛龍過江</name>

<path>3</path>

<size>0.0</size>

<label>0</label>

<font_type>0</font_type>

<font_color>0</font_color>

<font_size>0</font_size>

</book>

<book id="4">

<name>尋情記</name>

<path>4</path>

<size>0.0</size>

<label>0</label>

<font_type>0</font_type>

<font_color>0</font_color>

<font_size>0</font_size>

</book>

<book id="5">

<name>雲海玉弓緣</name>

<path>5</path>

<size>0.0</size>

<label>0</label>

<font_type>0</font_type>

<font_color>0</font_color>

<font_size>0</font_size>

</book>

</books>

===CODE=========

package com.example.FileManager;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.List;

import android.util.Log;

import android.util.Xml;

import org.xmlpull.v1.XmlPullParser;

import org.xmlpull.v1.XmlSerializer;

public class BookServices {

=====擷取XML配置  ====================

public List<Book>  getBooks(InputStream  st) throws Throwable

{

List<Book>   list = null;

Book book = null;

XmlPullParser parser = Xml.newPullParser();

parser.setInput(st, "UTF-8");

int type = parser.getEventType(); //産生事件

while (type!= XmlPullParser.END_DOCUMENT){

switch(type){

case XmlPullParser.START_DOCUMENT:

list = new ArrayList<Book>();

Log.d("==CXF==", "START_DOCUMENT");

break;

case XmlPullParser.START_TAG:

Log.d("==CXF==", "START_TAG");

String name = parser.getName(); //獲得名稱

Log.d("==CXF==", name);

if("book".equals(name)){

book = new Book();

book.setId(new Integer(parser.getAttributeValue(0)));

}

if(null != book){

if("name".equals(name))

{

book.setName(parser.nextText());

}else if("path".equals(name)){

book.setPath(parser.nextText());

}else if("size".equals(name)){

book.setSize(new Double(parser.nextText()));

}else if("label".equals(name)){

book.setlabel(new Integer(parser.nextText()));

}else if("font_type".equals(name)){

book.setFontType(new Integer(parser.nextText()));

}else if("font_color".equals(name)){

book.setFontColor(new Integer(parser.nextText()));

}else if("font_size".equals(name)){

book.setFontSize(new Integer(parser.nextText()));

}

}

break;

case XmlPullParser.END_TAG:

Log.d("==CXF==", "END_TAG");

if( "book".equals(parser.getName()) && book!=null ){

list.add(book);

book = null;

}

break;

}

type = parser.next();

}

st.close();

return list;

}

===============儲存XML配置=============

public static void save(List<Book> books, OutputStream out) throws Exception{

XmlSerializer  ser  = Xml.newSerializer();

ser.setOutput(out, "UTF-8");

ser.startDocument("UTF-8",   true);

ser.text("\n");

ser.startTag(null, "books");

Log.d("==CXF==", "v1");

for (Book  book1: books){

ser.text("\n\t");

ser.startTag(null, "book");

ser.attribute(null, "id", String.valueOf(book1.getId()));

ser.text("\n\t\t");

ser.startTag(null, "name");

ser.text(book1.getName());

ser.endTag(null, "name");

ser.text("\n\t\t");

ser.startTag(null, "path");

ser.text(book1.getPath());

ser.endTag(null, "path");

ser.text("\n\t\t");

ser.startTag(null, "size");

ser.text(String.valueOf(book1.getSize()));

ser.endTag(null, "size");

ser.text("\n\t\t");

ser.startTag(null, "label");

ser.text(String.valueOf(book1.getlabel()));

ser.endTag(null, "label");

ser.text("\n\t\t");

ser.startTag(null, "font_type");

ser.text(String.valueOf(book1.getFontType()));

ser.endTag(null, "font_type");

ser.text("\n\t\t");

ser.startTag(null, "font_color");

ser.text(String.valueOf(book1.getFontColor()));

ser.endTag(null, "font_color");

ser.text("\n\t\t");

ser.startTag(null, "font_size");

ser.text(String.valueOf(book1.getFontSize()));

ser.endTag(null, "font_size");

ser.text("\n\t");

ser.endTag(null, "book");

}

Log.d("==CXF==", "v2");

ser.text("\n");

ser.endTag(null, "books");

        ser.endDocument();

        out.flush();

        out.close();

}

}

==================更改某個特定的xml項目===============

原理:

      讀取原來整個xml的配置到一個list裡面

     周遊list内容,與傳入的book對比,如果相同,就更改這一項

      再重新寫入xml

public void changeBook(Book  book){

 String path = "/mnt/sdcard/temp/config.xml" ;

          File  xmlFile = new File(path);

          List<Book> listBook = null;

          if(xmlFile.exists()){

         BookServices ser = new BookServices();

         try{

         FileInputStream input = new FileInputStream(xmlFile);

         try{

         listBook = ser.getBooks(input);

          }catch(Throwable e){

          Log.d("==CXF==", e.getCause().toString());}

          }catch(FileNotFoundException e){

             Log.d("==CXF==", e.getCause().toString());}

         for (Book bookTemp: listBook){

        if(bookTemp.getName().equalsIgnoreCase(book.getName())){

        bookTemp.setPath(book.getPath());

        bookTemp.setSize(book.getSize());

        bookTemp.setlabel(book.getlabel());

        bookTemp.setFontType(book.getFontType());

        bookTemp.setFontColor(book.getFontColor());

        bookTemp.setFontSize(book.getFontSize());

        }

         }

         try{

        OutputStream out=new FileOutputStream (xmlFile,false);

                try{

                    ser.save(listBook, out);

                    }catch(Exception ex){

                        Log.d("==CXF==", ex.getCause().toString());}

          }catch(IOException e){

          Log.d("==CXF==", e.getCause().toString());}  

          }

}

}

=====Book 類============

package com.example.FileManager;

public class Book {

private String book_name;

private String book_path;

private double book_size;

private int    book_label;

private   int id;

private int  font_type;

private int  font_color;

private int  font_size;

public Book(){

book_name = null;

book_path = null;

book_size = 0;

book_label = 0;

    id = 0;

         font_type = 0;

font_color = 0;

 font_size = 0;

}

public Book(String str1, String str2,  double size1, int label1,  

int id1,  int type1,  int color1,  int size2){

this.book_name = str1;

this.book_path = str2;

this.book_size = size1;

this.book_label = label1;

   this.id = id1;

   this.font_color = color1;

   this.font_size = size2;

   this.font_type = type1;

}

public String getName(){

return book_name;

}

public void setName(String name){

this.book_name= name;

}

public String getPath(){

return book_path;

}

public void  setPath(String path){

this.book_path= path;

}

public double getSize(){

return this.book_size;

}

public void setSize(double size){

this.book_size = size;

}

public int getlabel(){

return this.book_label;

}

public void setlabel(int label){

this.book_label  = label;

}

public int  getId(){

return   id;

}

public void setId(int id){

this.id = id;

}

public int getFontSize(){

return this.font_size;

}

public void setFontSize(int size){

this.font_size = size;

}

public int getFontColor(){

return this.font_color;

}

public void setFontColor(int co){

this.font_color = co;

}

public int getFontType(){

return this.font_type;

}

public void setFontType(int type){

this.font_type = type;

}

}

繼續閱讀