简单介绍:
在Android应用开发中Pull方式解析XML是最被推荐的一种,Android系统内置了Pull解析器用来解析XML文件,它是采用事件驱动来完成XML解析的,只需要处理开始和结束事件,通常使用switch语句根据事件的类型匹配不同的处理方式。
最常使用的事件类型:
1. START_DOCUMENT:开始解析(只执行一次)
2. START_TAG:开始元素
3. TEXT:解析文本
4. END_TAG:结束元素
5. END_DOCUMENT:结束解析(只执行一次)
最常使用的方法:
1. getEventType():触发并获取第一个事件类型(START_DOCUMENT)
2. getName():获取元素名称
3. nextText():获取当前元素的值
4. next():触发下一个事件
5. getAttributeValue():获取当前元素的属性值(参数为索引,还有一个重载方法,是通过指定命名空间获取的)
用代码实现一下:
在assets目录中创建一个XML文件
<?xml version="1.0" encoding="utf-8"?>
<persons>
<person>
<id>1</id>
<name>zhangsan</name>
<age>18</age>
</person>
<person>
<id>2</id>
<name>lisi</name>
<age>19</age>
</person>
</persons>
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivityInfo";
private Button btnPull;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
/**
* 初始化UI
*/
private void initView() {
btnPull = (Button) findViewById(R.id.btn_pull);
btnPull.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
InputStream inputStream = getXmlData();
try {
parseXMLWithPull(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
/**
* 从assets目录中获取xml数据
*
* @return xml数据
*/
public InputStream getXmlData() {
//获取assets管理者
AssetManager assetManager = getAssets();
InputStream inputStream = null;
try {
//打开文件获取输入流
//inputStream输入流不能在此关闭,因为它还要作为其它方法的参数
inputStream = assetManager.open("persons.xml");
} catch (IOException e) {
e.printStackTrace();
}
return inputStream;
}
/**
* 使用Pull方式解析xml
*
* @param xmlData xml数据
*/
private void parseXMLWithPull(InputStream xmlData) throws IOException {
try {
//创建一个xml解析的工厂
XmlPullParse