代码:
主函数:
ublic class MainActivity extends AppCompatActivity {
String xmlString = "<apps>\n" +
"\t<app>\n" +
"\t\t<id>1</id>\n" +
"\t\t<name>google map</name>\n" +
"\t\t<version>1.0</version>\n" +
"\t</app>\n" +
"\t\n" +
"\t<app>\n" +
"\t\t<id>2</id>\n" +
"\t\t<name>google play</name>\n" +
"\t\t<version>2.0</version>\n" +
"\t</app>\n" +
"\t\n" +
"\t<app>\n" +
"\t\t<id>1</id>\n" +
"\t\t<name>chrome</name>\n" +
"\t\t<version>3.0</version>\n" +
"\t</app>\n" +
"\n" +
"</apps>";
String TAG = "parse_XML";
OutputStream outputStream = null;
List<App> all = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//解析XML文件
parseXMLWithPull(xmlString);
//添加数据源
for (int i = 0; i < 3; i++) {
App app = new App();
app.setId(i);
app.setName("app" + i);
app.setVersion(i);
all.add(app);
}
//生成XML文件
try {
//路径
// outputStream = new FileOutputStream(new File(Environment.getExternalStorageDirectory().toString()+File.separator+""));
String baseUrl = Environment.getExternalStorageDirectory().toString();
String path = baseUrl + File.separator + "apps.xml";
File file = new File( path);
outputStream = new FileOutputStream(file);
MyXMLPullUtils myXMLPullUtils = new MyXMLPullUtils(outputStream, all);
myXMLPullUtils.save();
} catch (Exception e) {
e.printStackTrace();
}
}
private void parseXMLWithPull(String xmlString) {
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
//解析器
XmlPullParser xmlPullParser = factory.newPullParser();
//开始读取xml文件
StringReader stringReader = new StringReader(xmlString);
xmlPullParser.setInput(stringReader);
//获取事件类型
int eventType = xmlPullParser.getEventType();
//
String id = "";
String name = "";
String version = "";
//如果没有结束,就一直执行,DOCUMENT指的是文档的结束
while(eventType != XmlPullParser.END_DOCUMENT){
//获取每一个节点的名称(每一对尖括号就是一对节点)
String nodeName = xmlPullParser.getName();
switch (eventType) {
//起始标签
case XmlPullParser.START_TAG:
if("id".equals(nodeName)){
id = xmlPullParser.nextText();
}else if("name".equals(nodeName)){
name = xmlPullParser.nextText();
}else if("version".equals(nodeName)){
version = xmlPullParser.nextText();
}
break;
//结束标签
case XmlPullParser.END_TAG:
if("app".equals(nodeName)){
Log.i(TAG,"id = "+ id);
Log.i(TAG,"name = "+ name);
Log.i(TAG,"version = "+ version);
}
break;
default:
break;
}
eventType = xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
App:
public class App {
private int id;
private String name;
private float version;
public App() {
}
public App(int id, String name, float version) {
this.id = id;
this.name = name;
this.version = version;
}
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 float getVersion() {
return version;
}
public void setVersion(float version) {
this.version = version;
}
}
MyXMLPullUtils:
public class MyXMLPullUtils {
OutputStream outputStream = null;
//用集合保存节点
private List<App> all = null;
public MyXMLPullUtils(OutputStream outputStream, List<App> all) {
this.outputStream = outputStream;
this.all = all;
}
public void save() throws Exception {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
//序列化
XmlSerializer xs = factory.newSerializer();
xs.setOutput(this.outputStream,"utf-8");
//转化为迭代器
Iterator<App> iterator = this.all.iterator();
xs.startDocument(null,true);
xs.startTag(null,"apps");
//循环遍历
while(iterator.hasNext()){
App app = iterator.next();
xs.startTag(null,"app");
xs.startTag(null,"id");
xs.text(app.getId()+"");
xs.endTag(null,"id");
xs.startTag(null,"name");
xs.text(app.getName());
xs.endTag(null,"name");
xs.startTag(null,"version");
xs.text(app.getVersion()+"");
xs.endTag(null,"version");
xs.endTag(null,"app");
}
xs.endTag(null,"apps");
xs.endDocument();
xs.flush();
outputStream.flush();
outputStream.close();
}
}