Android的pull讀寫XML
需求:
1.將下面這個xml檔案,解析成一個個person物件,並新增到一個List中,進行列印
2.在下面這個xml檔案中新增一條記錄,這個記錄從person物件獲取 (先將下面的xml解析稱person物件,放入一個集合中,再新增一個person物件到list中,最後展示的結果就和在下面xml中新增一條資料的效果一樣)
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="1">
<name>法師</name>
<age>85</age>
</person>
<person id="2">
<name>薩滿</name>
<age>90</age>
</person>
<person id="3">
<name>獵人</name>
<age>50</age>
</person>
</persons>
domain
public class Person {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
public Person(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
public Person() {
}
}
PersonService
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;
import android.util.Xml;
/**
* 將xml中的內容設定到Person物件
* 1.獲取一個輸入流,讀取xml檔案
* 2.常見pull解析器,並設定輸入流
* 3.迴圈獲取事件型別,一次判斷當標籤為person,name,age時所對應的狀態
* parser.getAttributeValue(0)是獲取標籤上的屬性
* parser.nextText();獲取下一個文字
*/
public class PersonService {
//將xml檔案內容設定到person物件中
public List<Person> loadPersons(InputStream in) throws XmlPullParserException, IOException {
XmlPullParser parser = Xml.newPullParser();// 獲取解析器
parser.setInput(in, "UTF-8");// 設定輸入流,指定碼錶
ArrayList<Person> persons = new ArrayList<Person>();
Person person = null;
//迴圈獲取當前的事件型別,如果事件型別不是結束文件,那麼就指向下一個事件型別 (一個標籤是一個事件)
for (int type = parser.getEventType(); type != XmlPullParser.END_DOCUMENT; type = parser.next()) {
if(type==XmlPullParser.START_TAG){//標籤開始事件 <?xml version="1.0" encoding="UTF-8"?>
if("person".equals(parser.getName())){//<person>標籤
//建立物件
person = new Person();
String id = parser.getAttributeValue(0);//獲取第一個屬性的屬性值
//parser.getAttributeValue(null, "id"); 第一個引數是名稱空間 第二個引數是屬性名
person.setId(Integer.parseInt(id));//將xml讀取出來的屬性設定到pserson物件上
persons.add(person);
}else if("name".equals(parser.getName())){//<name>標籤
//獲取下一個文字
String name = parser.nextText();
//設定name
person.setName(name);
}else if("age".equals(parser.getName())){//<age>標籤
//設定age
String age = parser.nextText();
//設定age
person.setAge(Integer.parseInt(age));
}
}
}
return persons;
}
//將person物件中的資料新增到xml檔案中
public void savePersons(List<Person> persons,OutputStream out) throws IllegalArgumentException, IllegalStateException, IOException {
XmlSerializer serializer = Xml.newSerializer();//獲取序列化物件
serializer.setOutput(out, "UTF-8");
serializer.startDocument("UTF-8", true);//開始文件
serializer.startTag(null, "persons");//<persons>
for (Person person : persons) {
serializer.startTag(null, "person");//<person>
serializer.attribute(null, "id", person.getId().toString());//設定屬性
serializer.startTag(null, "name");//<name>
serializer.text(person.getName());//設定標籤中間文字內容
serializer.endTag(null, "name");//</name>
serializer.startTag(null, "age");//<age>
serializer.text(person.getAge().toString());
serializer.endTag(null, "age");//</age>
serializer.endTag(null, "person");//</person>
}
serializer.endTag(null, "persons");//</persons>
serializer.endDocument();//結束文件
}
}
import org.xmlpull.v1.XmlPullParserException;
import android.test.AndroidTestCase;
public class PersonTest extends AndroidTestCase {
public void testLoad() throws XmlPullParserException, IOException{
PersonService service = new PersonService();
//獲取src下person.xml的輸入流
InputStream in = PersonTest.class.getClassLoader().getResourceAsStream("person.xml");
List<Person> persons = service.loadPersons(in);
for (Person person : persons) {
System.out.println(person);
}
Person person = new Person(4,"皮卡丘",3);
persons.add(person);
service.savePersons(persons,new FileOutputStream("/mnt/sdcard/persons.xml"));
}
}
結果為
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<persons>
<person id="1">
<name>法師</name>
<age>85</age>
</person>
<person id="2">
<name>薩滿</name>
<age>90</age>
</person>
<person id="3">
<name>獵人</name>
<age>50</age>
</person>
<person id="4">
<name>皮卡丘</name>
<age>3</age>
</person>
</persons>
相關文章
- Android中XML的解析--使用PULLAndroidXML
- Android系列--DOM、SAX、Pull解析XMLAndroidXML
- Android之深入理解xml資料的pull解析AndroidXML
- C# 讀寫xmlC#XML
- 用C#讀寫XML的方法C#XML
- 讀寫iOS XML檔案iOSXML
- JDom讀寫XML(程式碼)XML
- C#基礎系列:Linq to Xml讀寫xmlC#XML
- Python xml.etree.ElementTree讀寫xml檔案例項PythonXML
- python xml讀取和寫入PythonXML
- 使用C#讀寫xml檔案C#XML
- [xmlbeans]自動生成讀寫xml的java類XMLBeanJava
- nodejs xmlreader 讀寫xml檔案NodeJSXML
- C# - XML讀寫與序列化C#XML
- Dom4j 讀寫XML簡介XML
- dom4j讀寫xml檔案XML
- C#不使用DataSet操作XML,XmlDocument讀寫xml所有節點及讀取xml節點的資料總結C#XML
- Androidxml資料的讀取和寫入(sax,pull,dom,xstream,jsoup)AndroidXMLJS
- [android]adb push/pullAndroid
- C#讀寫xml檔案應用案例C#XML
- Android中檔案的讀寫操作Android
- asp.net 對xml檔案的讀寫,新增,修改,刪除操作ASP.NETXML
- Android,java,xml,xml讀取與儲存,基於AndroidXML解析與儲存的實現AndroidJavaXML
- java學習:使用dom4j讀寫xml檔案JavaXML
- 一個java讀取word文件並將其寫入xml文件的例子JavaXML
- 使用XmlWriter寫XmlXML
- c# winform下sql圖片二進位制儲存/讀取/顯示/寫入XML/讀取XML顯示C#ORMSQLXML
- Unity 讀取xmlUnityXML
- Android讀取XML實現軟體自動登陸AndroidXML
- 讀取xml檔案 解析雙層xmlXML
- 簡單對比git pull和git pull --rebase的使用Git
- C#讀取XMLC#XML
- XMl 檔案屬性的讀取XML
- XML 程式設計思想: 研讀XML Hacks(轉)XML程式設計
- 序列化篇 生成xml 以及讀取xmlXML
- pull解析
- Android XML 屬性AndroidXML
- Android UI : XML & 反射AndroidUIXML反射