最近看代码里面总是会出现XmlResourceParser,于是乎就想着去学习一下,这个东西到底是做什么的。
通过学习我们知道,这是一个动态解析XML文件的工具。
下面简单介绍一下用法:
常用的字段有:
int START_DOCUMENT = 0; //xml 文档开始标志
int END_DOCUMENT = 1; //xml 文档结束标志
int START_TAG = 2; //xml 标签开始标志
int END_TAG = 3; //xml 标签结束标志
int TEXT = 4;
常用方法:
int getEventType() //返回当前的事件类型,是上面的字段其中一个
String getName() //返回当前 TAG 的名字
String getText() //返回当前 text 的内容
String getAttributeName(int index) //返回指定位置的属性名,位置从0开始
String getAttributeValue(int index) //返回指定位置的属性值,位置从0开始
String getAttributeValue(String namespace,String name) //返回指定的属性名对应的属性值,如果没有使用命名空间,则第一个参数传入null
int next() //获取下一个要解析的事件,类似于光标下移
上面列出了主要使用的一些字段和方法,下面我们就通过一个简单的例子学习一下具体如何使用。
首先在Android studio中新建一个工程,然后新建一个文件夹命名为xml。
然后在文件夹下新建一个xml文件,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<xml xmlns:app="http://schemas.android.com/apk/res-auto">
<data
id="1"
value="value1" />
<daa
id="2"
value="value2" />
</xml>
接着我们就开始解析了:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "ZLL"; XmlResourceParser parser; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); parser = getResources().getXml(R.xml.resource); parser(); } private void parser() { int type; int i = 0; try { //循环直到文档结束 while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) { Log.d(TAG, "parser: " + type + ", " + parser.getDepth() + " " + (i++)); Log.d(TAG, "parser: " + parser.getName() + ", " + parser.getText() + " " + parser.getEventType()); if ("data".equals(parser.getName()) || "daa".equals(parser.getName())) { //如果获取到的tag的名字是 "data" 或者 "daa" 那就获取其中的属性 Log.d(TAG, "parser: ------" + parser.getAttributeValue(null, "id") + ", --- " + parser.getAttributeValue(null, "value")); } } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
上面就是很简单的一次动态解析的过程,如果有问题,可以私信我。谢谢。