在Android中, 有一些数据如配置信息,应用想着的数据资源需要保留,我们可以用原始XML资源来保留。不过,要注意一点的是,在Android Studio中原始XML资源不能直接定义在/res/路径下,会出现存在,在无法在工程目录中找到,并且也无法被应用所使用的情况,所以我们可以建立/res/xml目录,并且创建的时候选择File,类型里面便会有xml文件。这样,我们既可以顺利引用,也可以方便我们管理我们的资源文件。
顺便提一提,Android里面自带了Pull解析器,用来解析各种XML文档,因此Android推荐开发者用Pull解析器来解析xml文档, 不过开发者也可以根据自己的喜好去下载并安装其他的解析器的jar包。
好了,现在就让我们通过实例来练习一下如何使用原始xml文件来定义数据。
首先奉上效果图,通过点击按钮,我们可以解析并且呈现相关的xml文件里的数据。
第一步便是我们定义在/res/xml/students.xml文件
<?xml version="1.0" encoding="utf-8"?>
<students>
<student name="zhangsan" 籍贯="广州">计算机专业</student>
<student name="lisi" 籍贯="深圳">金融专业</student>
<student name="wangwu" 籍贯="杭州">法学专业</student>
</students>
第二步就是定义相关的activity_main.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity">
<TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="null">
</TextView>
<Button android:id="@+id/bn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="开始解析"/>
</LinearLayout>
第三步便是在MainActivity中开始解析与另一面定义好的数据与信息。
setContentView(R.layout.activity_main);
Button bn = (Button)findViewById(R.id.bn);
bn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View args) {
//根据XML资源的ID获取该资源的解析器
XmlResourceParser xrp = getResources().getXml(R.xml.students);
StringBuilder stringBuilder = new StringBuilder("");
//判断到没有XML文档的结尾处
try {
while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT)
{
//如果遇到开始标签
if(xrp.getEventType() == XmlResourceParser.START_TAG){
//获取该开始标签的标签名
String tagName = xrp.getName();
if(tagName.equals("student")){
//属性值可以通过属性名或者索引来获取,以下演示两种获取方式
String studentName=xrp.getAttributeValue(null,"name");
stringBuilder.append("学生的名字为:").append(studentName);
//根据索引来获取
String birthPlace = xrp.getAttributeValue(1);
stringBuilder.append(" 籍贯").append(birthPlace);
//获取文本节点的值
stringBuilder.append(" 专业为").append(xrp.nextText()).append("\n");
}
}
//获取解析器的下一个事件
xrp.next();
}
TextView tv = (TextView) findViewById(R.id.text);
tv.setText(stringBuilder.toString());
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
到此,相关的信息也就可以解析并提出出来了。