前言:
1>示例XML文件内容
对示例所演示的是如何解析一个XML文件,对于我们要解析的XML文件,其已经放入本应用的文件夹下了;
对于我们要解析的XML文件,其内容如下:
2>认识XmlPullParser
I>解析器的当前事件状态可以通过调用getEventType()方法来知道;
在最开始的时候,解析器是处于START_DOCUMENT的事件状态之中的;
II>
next()方法将会让解析器进入到下一个事件当中,然后其int类型的返回值表明了
解析器当前已处于哪个事件状态之中;
III>
以下事件类型,可以通过next()方法得到:
START_TAG
表明此刻一个XML的开始标签被读取
TEXT
表明此刻一个文本内容被读取,这个文本内容可以通过getText()方法获取到;
END_TAG
一个结束标签被读取
END_DOCUMENT
表明XML文件解析结束
代码示例如下:
MainActivity:
package com.example.administrator.testparsexml; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.util.Xml; import android.view.View; import org.xmlpull.v1.XmlPullParser; import java.io.File; import java.io.FileReader; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } /*** * 现在在本应用的文件夹有一个XML文件下, * 那么下面,我们来对其进行解析操作; * **/ public void parseXML(View view){ XmlPullParser xmlPullParser = Xml.newPullParser(); try { /*** * 指明需要解析的XML文件的位置 * **/ xmlPullParser.setInput(new FileReader(new File(getFilesDir(),"test.xml"))); /*** * 如果没有解析到XML文件的结尾,则继续解析 * ***/ while (xmlPullParser.getEventType() != XmlPullParser.END_DOCUMENT){ if(xmlPullParser.getEventType() == XmlPullParser.START_DOCUMENT){ Log.e("parseXML","开始解析"); }else if(xmlPullParser.getEventType() == XmlPullParser.START_TAG){ Log.e("parseXML",xmlPullParser.getName()); }else if(xmlPullParser.getEventType() == XmlPullParser.TEXT){ Log.e("parseXML",xmlPullParser.getText()); }else if(xmlPullParser.getEventType() == XmlPullParser.END_TAG){ Log.e("parseXML",xmlPullParser.getName()); } /*** * 移到下一个解析事件 * **/ xmlPullParser.next(); } Log.e("parseXML","结束解析"); } catch (Exception e) { e.printStackTrace(); } } }
运行结果如下:
总结:
1>
由于本示例中用到了SD的读操作,所以在AndroidManifest.xml中声明一下读权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2>
XML文件的解析方式有很多种,在这里采用Pull方式进行解析,在Pull方式解析的过程中:
xmlPullParser.getEventType()主要是用来获取当前解析器处于哪个节点上;
xmlPullParser.getName()主要是用来获取处在START_TAG或者END_TAG事件时的XML标签名
xmlPullParser.getText()主要是用来获取文本内容
xmlPullParser.next()主要是为了让解析器移动到下一个事件上,这样就可以把整个XML文件都遍历完
源码: