1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android 初步 XML------PULL解析器

Android 初步 XML------PULL解析器

时间:2022-10-12 01:43:47

相关推荐

Android 初步  XML------PULL解析器

对于XML文件,有三种解析方式 SAX(Simple API for Xml);DOM(Document Object Model);PULL解析器,各自的缺优点咋这里不详细说明。

PULL解析器时android自带的Xml文件的解析器 跟SAX很类似

以下用代码解释(代码中附有中文解释)

package com.jiany.handler_test;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Xml;import android.view.View;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;public class PullParseActivity extends AppCompatActivity {@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_pull_parse); }public void pullParseXmlClick(View view) {//获取ArrayList对象 ArrayList<Person> list = pullParse(); //打印list元素 for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i)); }}/** *定义一个解析Xml文件解析方法 * *@return*/ public ArrayList<Person> pullParse() {//创建一个ArrayList的对象,用于装入解析完后的Person的对象 ArrayList<Person> arrayList = new ArrayList<>(); //定义一个Person类对象(Person自行定义) Person person = null; //获取pull解析器的对象 XmlPullParser xmlPullParser = Xml.newPullParser(); //设置解析的文件流(这里的Xml文件我放在res/raw)用于添加到xmlPullParser对象中 InputStream inputStream = getResources().openRawResource(R.raw.person); try {//把等到的Xml文件input到xmlPullParser解析器中,并且文本编码为“UTF-8” xmlPullParser.setInput(inputStream, "UTF-8"); //获取当前的事件类型,用于判断文件是否开始解析 int eventType = xmlPullParser.getEventType(); //加入一个While循环解析 (判断是否文件解析结束,为flase下进行解析) while (eventType != XmlPullParser.END_DOCUMENT) {//用switch添加类型switch (eventType) {//若当前类型为开始标记,执行以下casecase XmlPullParser.START_TAG://解析器获取标记名称 例:<标记名称>XXX</标记名称> String tag = xmlPullParser.getName(); //判断:若标记名称为person 则获取当前标记名称的属性 if ("person".equals(tag)) {//创建Person对象 person = new Person(); //获取当前标记名称的属性 (getAttributeValue(命名空间,属性的名称)) person.personid = Integer.parseInt(xmlPullParser.getAttributeValue(null, "personid")); //继续判断 } else if ("name".equals(tag)) {//获取当前标记名称的下一组Text person.name = xmlPullParser.nextText(); } else if ("age".equals(tag)) {person.age = Integer.parseInt(xmlPullParser.nextText()); } else if ("sex".equals(tag)) {person.sex = xmlPullParser.nextText(); } else if ("tel".equals(tag)) {person.tel = xmlPullParser.nextText(); }break;//若当前类型为结束标记,执行以下casecase XmlPullParser.END_TAG://判断标记名称是否为person。ture就把person加到arrayList中 if ("person".equals(xmlPullParser.getName())){arrayList.add(person);}break;}//一个结束后,进行下一个解析eventType = xmlPullParser.next(); }} catch (XmlPullParserException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); }//返回一个的arrayList return arrayList; }}

</pre><div>person 类</div><pre class="java" name="code">public class Person {int personid;String name;int age;String sex;String tel;@Overridepublic String toString() {return "Perosn{" +"personid=" + personid +", name='" + name + '\'' +", age=" + age +", sex='" + sex + '\'' +", tel='" + tel + '\'' +'}';}}

xml

<society><person personid = "1"><name>建育</name><age>18</age><sex>男</sex><tel>13838389438</tel></person><person personid = "1"><name>煎鱼</name><age>18</age><sex>男</sex><tel>13737379437</tel></person></society>

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。