Android 讀取xml,XmlPullParser用法
阿新 • • 發佈:2018-12-05
- 讀取main/assets資原始檔夾裡的xml檔案
1.建立了一個activity按鈕,以下是按鈕實現讀取xml檔案,並儲存到list輸出到控制檯
public void btn(View view){ try { //從資原始檔夾assets下的xml 建立輸入流,將檔案輸入 InputStream as = this.getAssets().open("info.xml"); //例項化一個xml解析器 XmlPullParser xmlPullParser = Xml.newPullParser(); //將輸入流輸入給xml解析器 xmlPullParser.setInput(as,"utf-8"); //獲取xml解析器的xml節點編號 int eventType = xmlPullParser.getEventType(); //讀取全部xml內容 while(eventType != XmlPullParser.END_DOCUMENT){ switch (eventType) { //開始讀檔案 case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>(); break; //xml找到的節點儲存到list case XmlPullParser.START_TAG: if (xmlPullParser.getName().equals("person")) { person = new Person(); //獲取person屬性id String id = xmlPullParser.getAttributeValue(0); //日誌 Log.d("person.id", id); person.setId(Integer.parseInt(id)); eventType = xmlPullParser.next(); } else if (xmlPullParser.getName().equals("name")) { String name = xmlPullParser.nextText(); Log.d("person.name", name); person.setName(name); eventType = xmlPullParser.next(); } else if (xmlPullParser.getName().equals("age")) { String age = xmlPullParser.nextText(); Log.d("person.age", age); person.setAge(Integer.valueOf(age)); eventType = xmlPullParser.next(); } break; //結束節點 case XmlPullParser.END_TAG: if (xmlPullParser.getName().equals("person")) { persons.add(person); person = null; } break; } //下一個xml節點 eventType = xmlPullParser.next(); } //關閉輸入流 as.close(); } catch (Exception e) { e.printStackTrace(); } //迴圈輸出內容 for (int i = 0; i < persons.size(); i++) { System.out.println("name:"+persons.get(i).getName()+" age:"+persons.get(i).getAge()+" id:"+persons.get(i).getId()); } }
- person類,可以clt+insert快速建立
public class Person { private String name; private Integer age; private Integer id; public Integer getAge() { return age; } public void setAge(Integer age) { if (age < 1 || age > 100) { this.age = 0; } else { this.age = 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; } }
- xml檔案
<?xml version="1.0" encoding="UTF-8"?> <persons> <person id="1101"> <name>amos</name> <age>30</age> </person> <person id="1102"> <name>tom</name> <age>18</age> </person> </persons>
- 寫xml提示(自看)
public void save(View view) {
// 3.根據控制元件讀取使用者輸入的文字放入到字串變數中
final String name = et_name.getText().toString().trim();
final String age = et_age.getText().toString().trim();
final String id = et_id.getText().toString().trim();
// 4.判斷是否有空的內容
if (TextUtils.isEmpty(name) || TextUtils.isEmpty(age) || TextUtils.isEmpty(id)) {
Toast.makeText(this, "資訊不能為空", Toast.LENGTH_SHORT).show();
return;
} else {
// 5.將字串寫入到xml檔案中
final StringBuffer sb = new StringBuffer();
sb.append("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>");
sb.append("<info>");
sb.append("<student id=" + id + ">");
sb.append("<name>" + name + "</name>");
sb.append("<age>" + age + "</age>");
sb.append("</student>");
sb.append("</info>");
performCodeWithPermission("儲存學生資訊到sd卡", new PermissionCallback() {
@Override
public void hasPermission() {
// 1.建立一個xml檔案的序列化器
XmlSerializer serializer = Xml.newSerializer();
//檔案輸出流
FileOutputStream fos = null;
try {
fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory(), "info.xml"));
// 2.設定檔案的輸出和編碼方式
serializer.setOutput(fos, "utf-8");
// 3.寫xml檔案的頭
serializer.startDocument("utf-8", true);
// 4.寫info節點
serializer.startTag(null, "info");
// 5.寫student節點
serializer.startTag(null, "student");
// 6.寫屬性
serializer.attribute(null, "id", id);
// 7. 寫name
serializer.startTag(null, "name");
serializer.text(name);
serializer.endTag(null, "name");
// 8. 寫age
serializer.startTag(null, "age");
serializer.text(age);
serializer.endTag(null, "age");
serializer.endTag(null, "student");
serializer.endTag(null, "info");
serializer.endDocument();
fos.close();
Toast.makeText(MainActivity.this, "儲存學生資訊成功", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void noPermission() {
Toast.makeText(MainActivity.this, "沒有被授予許可權", Toast.LENGTH_SHORT).show();
}
}, Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
}