XML

来源:互联网 发布:什么鼠标垫好用 知乎 编辑:程序博客网 时间:2024/06/15 23:45



package com.example.xml;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlSerializer;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.util.Xml;import android.view.Menu;import android.view.MenuItem;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);writeXML();}/** * 往磁盘上写一个xml文件 *  * <?xml version="1.0" encoding="UTF-8" standalone="true"?> //文档的神明<persons> //标签tag<person id=“18"> //ID是person标签的一个属性<name>allen</name><age>36</age></person><person id=“28"><name>james</name><age>25</age></person></persons> *  */public void writeXML(){//解析xml >> pull//XmlPullParser parser = Xml.newPullParser();//XML 序列化工具类XmlSerializer serializer = Xml.newSerializer();File path = new File(Environment.getExternalStorageDirectory(),"persons.xml");try {FileOutputStream out = new  FileOutputStream(path);serializer.setOutput(out, "utf-8"); //给序列化工具设置输出路径和输出编码//准备序列化的内容serializer.startDocument("utf-8", true); //文档的申明开始//persons标签serializer.startTag(null, "persons"); // namespace 命名空间 一般为null ,name :代表的是标签名//person 标签serializer.startTag(null, "person");serializer.attribute(null, "id", "18"); // 用来指定标签的属性//构建name标签serializer.startTag(null, "name");serializer.text("zs"); // 设置一个标签之间的文本内容serializer.endTag(null, "name");//构建name标签serializer.startTag(null, "age");serializer.text("18"); // 设置一个标签之间的文本内容serializer.endTag(null, "age");serializer.endTag(null, "person");serializer.endTag(null, "persons");serializer.endDocument(); //文档申明结束} catch (Exception e) {e.printStackTrace();} }public void parserXML(){}}


package com.xh.tx.bean;public class Person {private int id;private String name;private String email;private String address;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public Person() {super();}public Person(int id, String name, String email, String address) {super();this.id = id;this.name = name;this.email = email;this.address = address;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", email=" + email+ ", address=" + address + "]";}}


package com.example.xml2;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlSerializer;import com.xh.tx.bean.Person;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.util.Xml;import android.view.Menu;import android.view.MenuItem;public class MainActivity extends Activity {private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);List<Person> list = new ArrayList<Person>();Person p = null;for(int i=0; i <10; i++ ){p = new Person(i,"zs" + i,"32432432@qq.com","西安南路" + i+ "号");list.add(p);}writePerson(list);readPerson();}/** * 有一个List<Person> list ; * 把list里面的所有对象序列化到sdcard里面形成一个xml文件 */public void writePerson(List<Person> list){if(null == list){return;}XmlSerializer serializer = Xml.newSerializer();File path = new File(Environment.getExternalStorageDirectory(),"list_person.xml");try {FileOutputStream out = new FileOutputStream(path);serializer.setOutput(out, "utf-8");//开始序列化xmlserializer.startDocument("utf-8", true);//根serializer.startTag(null, "persons");for(Person p : list){serializer.startTag(null, "person");serializer.attribute(null, "id", String.valueOf(p.getId()));//推进使用String.valueOf 将其他类型的对象转化为string对象serializer.startTag(null, "name");serializer.text(p.getName()); //<name>allen</name>serializer.endTag(null, "name");serializer.startTag(null, "email");serializer.text(p.getEmail()); serializer.endTag(null, "email");serializer.startTag(null, "address");serializer.text(p.getAddress()); serializer.endTag(null, "address");serializer.endTag(null, "person");}serializer.endTag(null, "persons");serializer.endDocument();} catch (Exception e) {e.printStackTrace();}}public void readPerson(){//工具类 我们称这种方式为pull解析(DOM,SAX,DOM4J)XmlPullParser parser = Xml.newPullParser();try {FileInputStream in = new FileInputStream(new File(Environment.getExternalStorageDirectory(),"list_person.xml"));parser.setInput(in, "utf-8");//设置你要解析那个文件,已什么编码格式把它读入到内存//下面开始解析xmlint eventType = parser.getEventType();List<Person> list = null;Person p = null; while(eventType != parser.END_DOCUMENT){switch (eventType) {case XmlPullParser.START_TAG: //访问静态变量的时候用类名来访问,不要用对象去调用if("persons".equals(parser.getName())){list = new ArrayList<Person>();}else if("person".equals(parser.getName())) //当遇到了person节点的时候创建person对象并解析id属性给person对象{p = new Person();int id = Integer.parseInt(parser.getAttributeValue(null, "id"));p.setId(id);}else if("name".equals(parser.getName())){String name = parser.nextText(); //一般用nextText 不用getTextp.setName(name);}else if("email".equals(parser.getName())){String email = parser.nextText(); //一般用nextText 不用getTextp.setEmail(email);}else if("address".equals(parser.getName())){String address = parser.nextText(); //一般用nextText 不用getTextp.setAddress(address);}break;case XmlPullParser.END_TAG:if("person".equals(parser.getName()))//表示person结束了,将person对象加入到list中{list.add(p);p = null; //及时的让我们不用的对象成为垃圾}break;default:break;}eventType = parser.next(); //尤其容易忘记}//打印一下解析出来的所有对象for(Person person : list){Log.d(TAG, person.toString());}} catch (XmlPullParserException e) {e.printStackTrace();}catch (Exception e) {e.printStackTrace();}}}



0 0
原创粉丝点击