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中。