使用自定义的XML资源,这当然也必须是Android的一个功能,Java开发者可以使用DOM,SAX等多种方式,Android内建了Pull来解析XML
那么我个人觉得在Android中还是使用它的内建解析方法比较好,使用其它方式还要下载它们的Jar包,还是挺麻烦的.
同样的,和动画资源一样,XML资源也没有默认创建,需要自己手动创建res/xml
下面先定义一个xml文件,然后再解析它
res/xml中创建books.xml
<?xml version="1.0" encoding="utf-8"?>
<books>
<book price="99.0" 出版日期="2008年">Java</book>
<book price="89.0" 出版日期="2009年">Jave EE</book>
<book price="69.0" 出版日期="2009年">Ajax</book>
</books>
下面在主界面中放一个按钮,点击时解析XML,然后显示在下面的文本框里面
package WangLi.Resouce.XmlResTest;
import java.io.IOException;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class XmlResTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button bn = (Button)findViewById(R.id.bn);
bn.setOnClickListener(new OnClickListener(){
public void onClick(View arg0)
{
//根据XML资源的ID获取解析该资源的解析器
//XmlResourceParser是XmlPullParser的子类
XmlResourceParser xrp = getResources().getXml(R.xml.books);
try
{
StringBuilder sb = new StringBuilder("");
//还没有到XML文档的结尾处
while(xrp.getEventType()!=XmlResourceParser.END_DOCUMENT)
{
//如果遇到了开始标签
if(xrp.getEventType()==XmlResourceParser.START_TAG)
{
//获取该标签的标签名
String tagName = xrp.getName();
if(tagName.equals("book"))
{
//根据属性名获取属性值
String bookName = xrp.getAttributeValue(null,"price");
sb.append("价格:");
sb.append(bookName);
//根据属性索引来获取属性值
String bookPrice = xrp.getAttributeName(1);
sb.append("出版日期:");
sb.append(bookPrice);
sb.append("书名:");
//获取文本节点的值
sb.append(xrp.nextText());
}
sb.append("\n");
}
//获取解析器的下一个事件
xrp.next();
}
EditText show = (EditText)findViewById(R.id.show);
show.setText(sb.toString());
}
catch(XmlPullParserException e)
{
e.printStackTrace();
}
catch(IOException e)
{
e.printStackTrace();
}
}
});
}
}
效果如下,当点击按钮时,文本框出现解析的XML文件内容