Android XML解析器– XMLPullParser
时间:2020-02-23 14:29:25 来源:igfitidea点击:
欢迎使用XMLPullParser的android xml解析器示例。
我们将有一个示例XML文件,该文件将在android应用程序中解析并显示在页面上。
Android XML解析器
XML代表可扩展标记语言。
XML文件通常在android中进行解析,以从中检索相关信息。
我们可以使用三种类型的android XML解析器。
- SAX解析器
- DOM解析器
- XMLPullParser
DOM解析器:DOM解析器使用基于对象的方法,其中将整个xml加载到内存中并进行验证。
然后,它开始解析xml文档。
它从起始节点解析到结束节点。
特定节点无法解析。
总体来说,它比其他两个要慢。
SAX和XMLPullParser:它们使用基于对象的方法,并且在内存和性能方面相似。
在上下文中,SAX与DOM相似,它开始从上到下进行解析,并且无法仅解析特定的节点。
相反,XMLPullParser可以解析特定的节点。
XML文件包含4个主要组件。
- Prolog:包含有关文件信息的第一行是prolog。
通常这是这行: - 事件:XML文件中的事件包括简单的开始和结束标记等
- 文字:两个标签之间的简单文字。
例如:我的文字</RandomTag - 属性:属性是标签中存在的标签的其他属性。
示例:一些文本或者嵌套标签
XMLPullParser
XMLPullParser是推荐的android xml解析器。
在本教程中,我们将寻求在我们的android应用程序中实现XMLPullParser。
Android XML解析器代码
我们已经在主目录中创建了一个Assets目录,并其中添加了一个xml文件,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<countries>
<country id="1">
<name>
San Franceco
</name>
<capital>
New Delhi
</capital>
</country>
<country id="2">
<name>
Australia
</name>
<capital>
Canberra
</capital>
</country>
<country id="3">
<name>
USA
</name>
<capital>
Washington, D.C.
</capital>
</country>
</countries>
注意:" id"是属性。
MainActivity.java如下:
package com.theitroad.xmlparsing;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView= (TextView)findViewById(R.id.text);
XmlPullParserFactory pullParserFactory;
try {
pullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser parser = pullParserFactory.newPullParser();
InputStream in_s = getApplicationContext().getAssets().open("sample.xml");
parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
parser.setInput(in_s, null);
ArrayList<Country> countries= parseXML(parser);
String text="";
for(Country country:countries)
{
text+= "id : "+country.getId()+" name : "+country.getName()+" capital : "+country.getCapital()+"\n";
}
textView.setText(text);
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
private ArrayList<Country> parseXML(XmlPullParser parser) throws XmlPullParserException,IOException
{
ArrayList<Country> countries = null;
int eventType = parser.getEventType();
Country country = null;
while (eventType != XmlPullParser.END_DOCUMENT){
String name;
switch (eventType){
case XmlPullParser.START_DOCUMENT:
countries = new ArrayList();
break;
case XmlPullParser.START_TAG:
name = parser.getName();
if (name.equals("country")){
country = new Country();
country.id=parser.getAttributeValue(null,"id");
} else if (country != null){
if (name.equals("name")){
country.name = parser.nextText();
} else if (name.equals("capital")){
country.capital = parser.nextText();
}
}
break;
case XmlPullParser.END_TAG:
name = parser.getName();
if (name.equalsIgnoreCase("country") && country != null){
countries.add(country);
}
}
eventType = parser.next();
}
return countries;
}
}
XMLPullParser实例化
XMLPullParser可以通过两种方式实例化。
- {列表}
XmlPullParserFactory pullParserFactory;
try {
pullParserFactory = XmlPullParserFactory.newInstance();
XmlPullParser parser = pullParserFactory.newPullParser();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
使用switch语句和while循环,我们解析每个标签并查找相关数据,并在标签结束时将整个对象添加到ArrayList中。
我们刚刚遍历了完整的ArrayList,并附加了字符串以显示在当前的默认TextView中。

