美文网首页我爱编程
使用XmlResourceParser动态解析XML

使用XmlResourceParser动态解析XML

作者: 简简单单0839 | 来源:发表于2017-08-22 16:24 被阅读0次

最近看代码里面总是会出现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();
    }
} }

上面就是很简单的一次动态解析的过程,如果有问题,可以私信我。谢谢。

相关文章

网友评论

    本文标题:使用XmlResourceParser动态解析XML

    本文链接:https://www.haomeiwen.com/subject/rjyldxtx.html