使用原始的XML资源
来源:互联网 发布:js修改a标签的href 编辑:程序博客网 时间:2024/05/16 12:34
6.5使用原始的XML资源
在某些时候,android应用有些初始化的配置信息,应用相关的数据资源需要保存,一般推荐使用xml文件来保存它们,这种资源就被成为原始XML资源。
6.5.1 定义原始xml资源
原始的XML资源一般报存在res/xml路径下,当使用adt创建android应用时,res目录下并没有包含xml目录,开发者需要自行手动创建一个xml目录。
接下来android应用对原始xml资源没有任何特殊要求,只要它是一份格式良好的xml文档即可。
一旦定义好了原始XML资源,接下来在xml文件中可通过如下语法来访问它 :
@[package_name:]xml.file_name
java中格式 :
[package.]R.xml.file_name
为了在java程序中获取到实际的xml文档,可以通过Resource的如下两个方法来获取 。
1.XmlResourceParser getXML(int id) :获取XML文档,并使用一个XmlPullParser来解析xml文档,该方法返回一个解析器对象(XmlResourceParser是XMLPullParser的子类)
2.InputStream openRewResource(int id) : 获取文档对应的输入流 。
大部分时候,我们可以直接调用getXm(int id)方法来获取xml文档,并对该文档进行解析。android默认使用内置Pull解析器来解析xml文件。
Pull解析类似于SAX解析,都是采取事件驱动方式来解析。当Pull解析器开始工作之后,开发者可不断地调用Pull解析器的next()方法来获取下一个解析事件(开始文档,结束文档,开始标签,结束标签等等)当处于某个元素处时,可调用XmlPullParser的getAttributeValue()方法来获取该元素属性值,也可调用XMLPullParser的nextText()方法来获取文本节点的值。
6.5.2使用原始XML文件
books.xml
<?xml version="1.0" encoding="utf-8"?><books> <book price = "88.8" 出版时间="2008年" > wanlihua 1 blog </book> <book price = "79.8" 出版时间="2009年" > wanlihua 2 blog </book> <book price = "90.8" 出版时间="2010年" > wanlihua 3 blog </book></books>
java:
package com.example.xmlrestest;import android.support.v7.app.ActionBarActivity;import android.content.res.XmlResourceParser;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import org.xmlpull.v1.XmlPullParserException;import java.io.IOException;public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub readBooksXml(); //readGestureXml(); } }); } public void readGestureXml() { //根据XML资源id获取解析该资源的解析器 XmlResourceParser xrp = getResources().getXml(R.xml.gesture_wakeup); try { StringBuilder sb = new StringBuilder(); while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) { //如果遇到了开始标签 if(xrp.getEventType() == XmlResourceParser.START_TAG){ //获取该标签的标签名 String tagName = xrp.getName(); //如果遇到的的book标签 if(tagName.equals("gesture")){ //根据属性名来获取属性值 String gestrueName = xrp.getAttributeValue(null, "name"); sb.append("name:"); sb.append(gestrueName); //根据属性索引来获取属性值 String settingKey = xrp.getAttributeValue(1); sb.append(" settingkey: "); sb.append(settingKey); String settingKeyCmd = xrp.getAttributeValue(2); sb.append(" settingKeyCmd: "); sb.append(settingKeyCmd); } sb.append("\n"); } xrp.next(); } EditText show = (EditText) findViewById(R.id.textView1); show.setText(sb.toString()); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void readBooksXml() { //根据XML资源id获取解析该资源的解析器 XmlResourceParser xrp = getResources().getXml(R.xml.books); try { StringBuilder sb = new StringBuilder(); while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) { //如果遇到了开始标签 if(xrp.getEventType() == XmlResourceParser.START_TAG){ //获取该标签的标签名 String tagName = xrp.getName(); //如果遇到的的book标签 if(tagName.equals("book")){ //根据属性名来获取属性值 String bookName = xrp.getAttributeValue(null, "price"); sb.append("价格: "); sb.append(bookName); //根据属性索引来获取属性值 String bookPrice = xrp.getAttributeValue(1); sb.append(" 出版日期: "); sb.append(bookPrice); sb.append(" 书名: "); sb.append(xrp.nextText()); } sb.append("\n"); } xrp.next(); } EditText show = (EditText) findViewById(R.id.textView1); show.setText(sb.toString()); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}
阅读全文
0 0
- 使用原始的XML资源
- 使用原始的XML资源
- 使用原始XML资源
- Android 使用原始XML资源
- Android 使用原始xml资源
- Android原始资源的使用
- Android---原始XML资源
- 原始XML资源
- 原始XML资源
- Android中原始资源的使用
- Android 原始资源文件的使用详解
- Android 使用原始资源
- Drawable资源---使用原始资源
- 使用原始XML资源保留配置信息或者相关数据资源
- Android中使用Xml内置解析器pull来解析Xml原始资源
- android之使用原始资源
- android之使用原始资源
- 原始 XML 的读写
- Spring 5 的 WebFlux 开发反应式 Web 应用
- Qt样式表的使用总结
- 40分钟视频帮你搞懂struts2的原理(值栈,拦截器)
- Oracle反转倒置函数
- class文件结构[3] 常量池
- 使用原始的XML资源
- 基于shp完成echarts map的显示
- 有效区域和无效区域
- java SSM和vue整合
- 前百度研究院院长林元庆宣布离职,京东物流与怡康医药合作打造“医药云仓”| 大数据24小时
- 网智天元副总裁刘喆:大数据智能提速汽车消费金融
- 金融魔方创始人兼CEO刘嘉:金融SaaS为中小企业赋能的机遇与挑战
- 【每周一本书】之《套路!机器学习:北美数据科学家的私房课》
- shell学习笔记