<?xml version="1.0" encoding="utf-8"?>
<classes>
<group name="一年级" num="10">
<person name="小明" age="7">
<chinese>
语文80
</chinese>
<english>
英语89
</english>
</person>
<person name="小强" age="8">
<chinese>
语文90
</chinese>
<english>
英语99
</english>
</person>
</group>
<group name="二年级" num="20">
<person name="小文" age="8">
<chinese>
语文85
</chinese>
<english>
英语95
</english>
</person>
<person name="小中" age="9">
<chinese>
语文80
</chinese>
<english>
英语90
</english>
</person>
</group>
</classes>
package cn.com.pull;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Xml;
import android.widget.TextView;
public class PullParseXmlActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView txt = (TextView) findViewById(R.id.txt);
InputStream inputStream = null;
try {
inputStream = this.getResources().getAssets().open("pullTest.xml");
} catch (IOException e) {
e.printStackTrace();
}
txt.setText(pullParseXml(inputStream));
}
private String pullParseXml(InputStream inputStream) {
String result = "";
//解析全部的xml
boolean isParse = true;
try {
// 创建一个xmlPullParser的工厂
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
// 获取一个解析实例
XmlPullParser parse = factory.newPullParser();
// 设置输入流的编码格式
parse.setInput(inputStream, "UTF-8");
// 当前事件的类型
int eventType = parse.getEventType();
while (XmlPullParser.END_DOCUMENT != eventType) {
// 当前节点的名称
String nodeName = parse.getName();
switch (eventType) {
case XmlPullParser.START_TAG:
if ("group".equals(nodeName)) {
// 解析<group>节点中的属性值,getAttributeCount()获取属性的个数
for (int i = 0; i < parse.getAttributeCount(); i++) {
// 属性名称
String groupName = parse.getAttributeName(i);
// 属性名称对应的值
String nameValue = parse.getAttributeValue(i);
result = result + groupName + " = " + nameValue;
}
} else if ("person".equals(nodeName)) {
String personName = parse.getAttributeValue(0);
String age = parse.getAttributeValue(1);
result = result + "personName = " + personName
+ "age =" + age + "\n";
} else if ("chinese".equals(nodeName)) {
//节点对应的文本
String chinese = parse.nextText();
result = result + "chinese = " + chinese;
} else if ("english".equals(nodeName)) {
String english = parse.nextText();
result = result + "english = " + english + "\n";
}
break;
case XmlPullParser.END_TAG:
break;
default:
break;
}
//整个xml文件全部解析
if(isParse){
eventType = parse.next();
}
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}