android xmlns,
在机器人平台下操作可扩展标记语言方式有很多种,常见的为萨克斯(简单APIfor XML)和文档对象模型。
萨克斯管操作可扩展标记语言的特点是当读取可扩展标记语言文件的时候会随时触发事件,通过事件来处理当前读取到的内容。这一点是跟数字正射影像图有所不同的,dom是全部读取完后在进行操作。
现在这个实例是以萨克斯管进行可扩展置标语言操作的!
这个例子是读取谷歌的天气预报为例子做成了,使用的可扩展置标语言地址如下:http://www.google.com/ig/api?天气=北京hl=zh-cn
通过互联网获取天气的可扩展置标语言代码,然后再通过萨克斯管进行读取:
在例子中只是读取了当前的时时天气,没有对预报的内容进行读取,等以后再完善吧:
首先根据可扩展置标语言文件抽象出一个类来,我获取到的可扩展置标语言代码如下:
?可扩展标记语言版本=1.0 ?
xml_api_reply版本=1
weather module _ id= 0 tab _ id= 0 mobile _ row= 0 mobile _ zipped= 1
row="0"section="0 "
预测_信息
城市数据=北京,北京/
邮政编码数据=北京/
纬度_e6数据= /
经度_e6数据= /
forecast _ date data= 2010-12-27 /
current _ date _ time data= 2010-12-28 04:00:00 0000 /
unit_system data=SI /
/预测_信息
当前条件
条件数据=晴 /
temp_f data=28 /
temp_c data=-2 /
湿度数据=湿度: 27% /
icon data=/ig/images/天气/晴天。gif /
风况数据=风向:西北、风速:7 米/秒 /
/当前条件
预测_条件
星期几数据=周一 /
低位数据=-12 /
高数据=6 /
icon data=/ig/images/天气/晴天。gif /
条件数据=晴 /
/预测_条件
预测_条件
星期几数据=周二 /
低位数据=-11 /
高数据=1 /
icon data=/ig/images/天气/晴天。gif /
条件数据=晴 /
/预测_条件
预测_条件
星期几数据=周三 /
低位数据=-11 /
高数据=2 /
icon data=/ig/images/weather/chance _ of _ snow。gif /
条件数据=可能降雪 /
/预测_条件
预测_条件
星期几数据=周四 /
低数据=-13 /
高数据=-2 /
icon data=/ig/images/天气/晴天。gif /
条件数据=晴 /
/预测_条件
/天气
/xml_api_reply
不同时间可能获取到的不同,但是格式应该是一致的!下面是根据这个抽象出来的类:
包com .SAXXMLReader
现在天气公共类{
私有字符串条件;
私有字符串temp _ f
私有字符串temp _ c;
私弦湿度;
私有字符串图标;
私有字符串风力条件
公共noweather(){
}
公共void setcondition(字符串条件){
这.条件=条件;
}
public void settempf(String temp _ f){
this.temp _ f=临时_ f
}
public void settempc(String temp _ c){
this.temp _ c=温度_ c
}
公共空设置湿度(字符串湿度){
这个。湿度=湿度;
}
公共void seticon(字符串图标){
this.icon=图标
}
public void setwindcondition(String wind _ condition){
this.wind_condition=风况;
}
公共字符串getNowWeather()
{
StringBuilder strBuilder=new StringBuilder();
strBuilder.append(条件\ n’);
strbuilder。append(temp _ f \ n );
strbuilder。append(temp _ c \ n );
strBuilder.append(湿度\ n’);
strBuilder.append(图标\ n’);
strbuilder。append(wind _ condition \ n );
返回strbuilder。tostring();
}
}
这个类保存的是获取到的数据,形式可能有多种,这个根据个人的习惯进行书写吧。写到这里,因为在萨克斯管中使用的时候需要有一个默认处理程序类的继承,实现如下:
包com .SAXXMLReader
导入org。XML。萨克斯。属性;
导入org。XML。萨克斯。sax异常;
导入org。XML。萨克斯。帮手。默认处理程序;
导入安卓。util。日志;
公共类天气处理员扩展了默认处理程序{
私有最终字符串CURRENT _ CONDITIONS= CURRENT _ CONDITIONS ;//当前
私有最终字符串forecast _ conditions= forecast _ conditions ;//当前
//实时天气信息
私有布尔值是当前条件=假
//预报天气信息
private boolean is _ Forecast _ Conditions=false;
now weather now weather=new now weather();
@覆盖
公共空字符(char[] ch,int start,int length)
引发sax异常{
//TODO自动生成的方法存根
super.characters(ch,start,length);
}
@覆盖
public void startDocument()抛出sax异常{
//TODO自动生成的方法存根
超级棒。startdocument();
}
公共WeatherHandler() {
}
@覆盖
公共void startElement(字符串uri,字符串localName,字符串qName,
属性属性)抛出sax异常{
//TODO自动生成的方法存根
//super.startElement(uri,localName,qName,attributes);
字符串dataAttribute= OK
//Log.d(WeatherHandler ,本地名);
如果(本地名称。等于(当前条件)){
Log.d(WeatherHandler ,本地名);
是当前条件=真
} else if(本地名。equals(forecast _ conditions)){
是当前条件=假
}否则{
数据属性=属性。getvalue( data );
如果(这个。is _ Current _ Conditions){
Log.d(WeatherHandler_1 ,数据属性);
//这个。现在是天气。设置条件(数据属性);
如果(本地名称。等于(条件){
这个。现在是天气。设置条件(数据属性);
} else if(本地名。等于( temp _ f ){
这个。现在是天气。settempf(数据属性);
} else if(本地名。等于( temp _ c ){
这个。现在是天气。settempc(数据属性);
} else if (localName.equals(湿度){
这个。现在是天气。设置天气(数据属性);
} else if(本地名。等于(图标){
这个。现在是天气。seticon(数据属性);
} else if(本地名。等于(风况){
这个。现在是天气。setwindcondition(数据属性);
}
} else if(这个。is _ Forecast _ Conditions){
Log.d(WeatherHandler_1 ,数据属性);
}
}
//Log.d(WeatherHandler_1 ,数据属性);
}
公共字符串getnoweather(){
返回现在是天气。getnoweather();
}
@覆盖
公共void endDocument()抛出sax异常{
//TODO自动生成的方法存根
超级棒。结束文档();
}
@覆盖
公共void endElement(字符串uri,字符串localName,字符串名称)
引发sax异常{
}
}
在这里实现了读取可扩展置标语言代码,并且保存到抽象出来的类中,以供调用。下面的方法是对这个类的调用,通过调用,获取内容:
解析器工厂派系=SAXParserFactory。新实例();
sax解析器parser=fadiy。newsaxparser();
天气处理程序handler=新的天气处理程序();
XML阅读器reader=解析器。获取XML reader();
reader.setContentHandler(处理程序);
URL url=新URL(SRC);
http connection http conn=(HttpURLConnection)URL。打开连接();
//http conn . getinputstream();
InputStream inStream=http conn . getinputstream();//this.getResources().openraw资源(r . XML。天气);
InputStreamReader是reader=new InputStreamReader(在流中,“GBK”);
//缓冲阅读器buff reader=新的缓冲阅读器(is阅读器);
//String line=" ";
//字符串数据="";
//
//while((line=buff reader。readline())!=空)
//data=line;
//text1.setText(数据);
//Toast.makeText(this,data,Toast .长度_长)。show();
输入源输入源=新输入源(是阅读器);
读者。解析(输入源);
文本1。settext(处理程序。getnoweather());
//Toast.makeText(this,handler.getNowWeather(),Toast .长度_长)。show();
这里直接通过获取网上的可扩展置标语言进行的解析,当然你也可以读取本地的可扩展置标语言文件进行解析,这个是一样的。因为有事情,这个写的包括一些方法的命名可能不是怎么规则,还请多多谅解。
如果代码中有什么错误,欢迎指正!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。