一、在Android应用中的XML文件来源
1、本地xml文件
本地XML文件可以放在应用根目录assets文件夹、res/xml、res/raw、SDcard卡、应用的data目录等;
除res/xml可直接通过getXml(int id)获取XML文档,返回一个解析器对象(XmlResourceParer:XmlResourceParer是XmlPullParser的子类),其它位置情况都可以获取XML文档,返回一个Inputstream对象,进行读取数据,获取方法分别如下:
a在res/xml目录下(推荐使用):
[java] view plaincopy
XmlResourceParser xmlParser = thisgetResources()getXml(RxmlXXX);
b在res/xml、res/raw目录下:
[java] view plaincopy
InputStream inputStream = thisgetResources()openRawResource(RxmlXXX);
c在assets文件夹下(本人测试发现通过此方法获取的XML文档不能带有首行:<xml version="10" encoding="utf-8">,否则解析报错,具体原因未查明,知道原因请回复交流):
[java] view plaincopy
InputStream inputStream = getResources()getAssets()open(fileName);
d在应用指定目录下(SDcard,应用data目录等):
[java] view plaincopy
// path路径根据实际项目修改,此次获取SDcard根目录
String path = EnvironmentgetExternalStorageDirectory()toString();
File xmlFlie = new File(path+fileName);
InputStream inputStream = new FileInputStream(xmlFlie);
2、通过url得到的xml文件
很多时候需要解析xml文件都用于客户端与服务器之间的数据交互,比如解析google天气预报信息,或自己项目内定的一些XML数据结构,其中通过URL,使用Default>
OceanBase实现extractvalue函数解析XML的原理如下:
1 将XML文档转换为DOM树。
2 根据XPath表达式获取需要提取的节点。
3 将节点的值提取出来。
4 返回提取的值。
具体实现步骤如下:
1 将XML文档转换为DOM树:
OceanBase中使用了第三方库libxml2来解析XML文档,可以将XML文档解析为DOM树。
2 根据XPath表达式获取需要提取的节点:
XPath是用来在XML文档中定位节点的语言。OceanBase使用了XPath语言,通过XPath表达式可以在DOM树中定位到需要提取的节点。
3 将节点的值提取出来:
在定位到需要提取的节点之后,使用libxml2提供的API函数获取节点的值。
4 返回提取的值:
将提取的值返回给调用extractvalue函数的程序。
需要注意的是,如果XPath表达式无法定位到节点,则extractvalue函数返回NULL。如果节点的值为空,则extractvalue函数返回空字符串。
组态王是一款可视化工控软件,其主要用途是通过图形化界面实现各种控制、监控和数据处理等功能。如果您需要在组态王中显示实时天气,可以按照以下步骤进行设置:
1 获取天气数据源:首先需要从一个可靠的天气数据源获取实时的天气信息。您可以从各大天气服务提供商或者气象局的网站上获取相关数据,例如温度、湿度、风力、降雨量等。一般这些服务提供商都会有相关的API接口,您可以通过API访问天气数据。
2 解析数据格式:获取到天气数据后,需要将数据解析成组态王所支持的格式。常见的数据格式包括XML、JSON、CSV等。您可以使用Python等编程语言进行数据格式转换,并将转换后的数据写入到组态王支持的数据库中。
3 在组态王中添加控件:在组态王中添加控件,例如文本框、曲线图等来显示天气数据。您可以根据需要自定义控件的大小、颜色和字体等,以及添加动态效果和声音提示。具体 *** 作方式请参考组态王的帮助文档和教程。
4 绑定数据源:最后一步是将天气数据绑定到相应的控件上,实现数据的实时显示。在组态王中,您可以使用数据绑定功能,将数据源和控件进行绑定,以自动更新控件中的数据。具体 *** 作方式请参考组态王的帮助文档和教程。
需要注意的是,在使用天气数据时,您需要遵循相关规定和条款,并且确保数据的准确性和可靠性。同时,在绑定数据时,需要注意控件类型和数据类型的匹配,以避免出现错误和异常。
首先将省市信息以的形式保存到名为arraysxml的文件中(我记得貌似一定要把文件名取为arraysxml)。其中,name属性可以理解为数组名和ID名。这里要注意:省份的顺序要与对应拥有的城市顺序一致。即台湾为最后最后一个省,
在选择城市界面对应的Activity中,通过下面代码将省份列表显示。其中Rarrayprovinces就是我们上面定义的name属性值。
ArrayAdapter adapter =
ArrayAdaptercreateFromResource(this,Rarrayprovinces,androidRlayoutsimple_spinner_item);
provinceSpinnersetAdapter(adapter);
接着,对省份下拉列表进行监听。这里有一个比较麻烦的地方,因为当你选择不同的省份的时候,需要显示该省份对应的城市。面对那么多的省份,如果我们通过if或者switch来 *** 作的话,使得代码很冗长,也难以维护。发现这里是通过Rarrayname这种形式来显示下拉列内容的。通过观察R文件,发现了一定的规律。R文件中的array类的int属性值,是根据写入顺序,从0x7f050000开始,逐个+1形成的。即
public static final int provinces=0x7f050000;
public static final int beijing_array=0x7f050001;
public static final int tianjin_array=0x7f050002;
可能R文件中没有按照此顺序排列,不过,不影响这一性质。所以我就想到了只要城市数组的顺序与省份一一对应(上面提到过),就可以通过所选省份的position,跟ID初始值
0x7f050000相加,得出所属城市的数组。具体看看代码
provinceSpinnersetOnItemSelectedListener(new OnItemSelectedListener()
{
public void onItemSelected(AdapterView parent, View view,
int position, long id) {
if(position != 0){//选择了省份,position=0时,为“--请选择--”
0x7f050000为R文件中省份数组对应的id值,只要加上position,即可获得对应选项(省份)的城市
/
int cityID = 0x7f050000 + position;
ArrayAdapter adapter =
ArrayAdaptercreateFromResource(getApplicationContext(), cityID,
androidRlayoutsimple_spinner_item);
citySpinnersetAdapter(adapter);
}
}
public void onNothingSelected(AdapterView parent) {
}
});
二。
三、SQLite保存城市数据
使用SQLite而不使用Intent传递参数,是因为当用户下次打开程序时,当前城市应该为TA最后一次的选择。关于SQLite的使用,网上有很多文章,比如:52androidblog51ctocom/2554429/478368
之前也学习过一些,但四、PreferenceActivity作为设置界面
参照Android系统的设置,用PreferenceActivity来对系统进行信息配置和管理。这里我也采用PreferenceActivity作为设置界面。(上方图三)
首先,编写xml文件。PreferenceCategory:类别(用于分组)。key:唯一标识(获取信息时使用)。title:显示标题。summary:小标题。还有defaultValue:默认值。我这里值用到了CheckBoxPreference,它还有EditTextPreperence,RingtonePreference,ListPreference,Preference等。
schemasandroidcom/apk/res/android" >
android:key="threeDay"
android:summary="今明后三天的天气预报,如果不选,则只有当天的天气"
android:title="三天预报" />
android:key="cityInfo"
android:summary="关于当前城市的简要介绍"
android:title="城市简介" />
然后,新建Activity继承 PreferenceActivity
,重写onCreate方法,通过addPreferencesFromResource(Rxmlxx); 加载Preference。
public class SetupActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
addPreferencesFromResource(Rxmlsetup);
}
}
最后,获取preference数据。可 通过下面三种方式:
1、getPreferences():可以获取同一activity中的preference;
2、getSharedPreferences():可以获取应用级别的preferences,即封装在同一app中,使用SharePreferences
prefs = getSharedPreferences(packName+name ,0)
3、getDefaultSharedPreferences():通过Android的管理器来获取其所管理的preferences。
由于这里不是同一个Activity,所以不能使用getPreferences()。我这里只有一个preference,因此使用PreferenceManagergetDefaultSharedPreferences(this);来获取较方便。
五、通过WebService获取天气信息
WebService获取天气的网址为:webxmlcomcn/webservices/weatherwebserviceasmx上面
// 保存获取到的信息
SoapObject detail = null;
// 1实例化SoapObject对象
SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME);
// 2如果方法需要参数,设置参数
soapObjectaddProperty("theCityName", cityName);
// 3设置Soap的请求信息,获得序列化envelope,参数部分为Soap协议的版本号
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelopeVER11);
envelopebodyOut = soapObject;
envelopedotNet = true;
envelopesetOutputSoapObject(soapObject);
// 4构建传输对象
int timeout = 10000;// 设置超时为10秒
MyAndroid>
实现思路:可以通过w3c的dom解析器进行 *** 作,之后通过getName获取到xmltpye中的属性值。
举例:
import javaioFile;
import javaxxmlparsersDocumentBuilder;
import javaxxmlparsersDocumentBuilderFactory;
import orgw3cdomDocument;
import orgw3cdomElement;
import orgw3cdomNodeList;
public class DomTest1
{
public static void main(String[] args) throws Exception
{
// step 1: 获得dom解析器工厂(工作的作用是用于创建具体的解析器)
DocumentBuilderFactory dbf = DocumentBuilderFactorynewInstance();
// Systemoutprintln("class name: " + dbfgetClass()getName());
// step 2:获得具体的dom解析器
DocumentBuilder db = dbfnewDocumentBuilder();
// Systemoutprintln("class name: " + dbgetClass()getName());
// step3: 解析一个xml文档,获得Document对象(根结点)
Document document = dbparse(new File("candidatexml"));
NodeList list = documentgetElementsByTagName("PERSON");
for(int i = 0; i < listgetLength(); i++)
{
Element element = (Element)listitem(i);
String content = elementgetElementsByTagName("NAME")item(0)getFirstChild()getNodeValue();
Systemoutprintln("name:" + content);
Systemoutprintln("--------------------------------------");
}
}
}
如果获取到节点话,就调用attributeValue(String name)方法获取里面的值就好了。
$cat testsh
#!/bin/bash
if [ -z $1 ];then
echo 'USAGE:COMMAND FILENAME'
exit 0
fi
filename=recordtxt
HOST=(`sed -n 's/>\(\)<\/host>/\1/p' $1`)
OIDG=(`sed -n 's/>\(\)<\/oidgroupname>/\1/p' $1`)
COMM=(`sed -n 's/>\(\)<\/communitystring>/\1/p' $1`)
DESC=(`sed -n 's/>\(\)<\/description>/\1/p' $1`)
FILE=(`ls -l $filename >/dev/null 2>&1 | awk '{print $8}'`)
if [ ! -z $FILE ];then
echo -e "host\t\toidgroupname\t\tcomm\t\tdesc" >$filename
fi
for((i=0;i<${#HOST[@]};i++));do
echo -e "${HOST[i]}\t${OIDG[i]}\t${COMM[i]}\t\t${DESC[i]}" >>$filename
done
$/testsh file
$cat recordtxt
host oidgroupname comm desc
19216811 CpuUtilization_MF public 19216811_CPUUtilizaton
19216812 CpuUtilization_MF public 19216812_CPUUtilizaton
19216813 CpuUtilization_MF public 19216813_CPUUtilizaton
19216814 CpuUtilization_MF public 19216814_CPUUtilizaton
19216815 CpuUtilization_MF public 19216815_CPUUtilizaton
以上就是关于新手使用android的XML(DOM)解析问题,指定路径XML如何读取全部的内容,包括:新手使用android的XML(DOM)解析问题,指定路径XML如何读取、CISCO的IP电话要通过XML来显示天气预报、oceanbase 如何实现extractvalue函数解析xml等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)