您的位置:首页 > 其它

XML

2015-11-05 15:48 260 查看
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 {

@Override
protected 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;
}
@Override
public 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";

@Override
protected 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");

//开始序列化xml
serializer.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");//设置你要解析那个文件,已什么编码格式把它读入到内存

//下面开始解析xml
int 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 不用getText

p.setName(name);
}else if("email".equals(parser.getName()))
{
String email = parser.nextText(); //一般用nextText 不用getText
p.setEmail(email);
}else if("address".equals(parser.getName()))
{
String address = parser.nextText(); //一般用nextText 不用getText
p.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();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: