XmlResoureParser 和 XmlPullPaerser 都是基于事件的xml文件的解析器,使用上基本上是一致的,只是在数据来源上XmlResoureParser更方便的解析res中xml文件内容, XmlPullPaerser 解析通过网络、外部读取来的xml文件。
XmlResoureParser 建立实例代码:
XmlResoureParser xml=getResources().getXml(R.xml.test);
XmlPullPaerser 建立实例代码:
XmlPullParserFactory xmlFactory=XmlPullParserFactory.newInstance();
XmlPullParser xml=xmlFactory.newPullParser();
使用过程中,两者就都是一样了,下面以XmlResoureParser 作演示,XmlPullPaerser解析方式一样:
解析一个xml文件下test.xml文件
源代码
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
XmlResourceParser xmlResourceParser=getResources().getXml(R.xml.test);
int eventType;
String name=null,age=null,sex=null;
try {
while ((eventType=xmlResourceParser.next())!=XmlResourceParser.END_DOCUMENT)
{
switch (eventType)
{
case XmlResourceParser.START_DOCUMENT:Log.i("开始解析文档","");break;
case XmlResourceParser.START_TAG:
Log.i("读取标签","");
if(xmlResourceParser.getName().equals("name")) name=xmlResourceParser.nextText();
else if(xmlResourceParser.getName().equals("age")) age=xmlResourceParser.nextText();
else if(xmlResourceParser.getName().equals("sex")) sex=xmlResourceParser.nextText();
break;
case XmlResourceParser.TEXT: Log.i("读取文本","");break;
case XmlResourceParser.END_TAG:Log.i("标签结束标志","");break;
case XmlResourceParser.END_DOCUMENT:Log.i("内容结束","");break;
}
}
Log.i("读取结果:","name="+name+" age="+age+" sex="+sex);
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
}
运行结果: