android pull解析XML
来源:互联网 发布:js数组地址指向 编辑:程序博客网 时间:2024/06/05 16:35
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.xml_pullparse"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.xml_pullparse.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这个是要解析的xml
package com.example.xml_pullparse;
import java.io.Serializable;
public class ManifestObjective implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String mXmlns;
private String mPackage;
private String mVersionCode;
private String mVersionName;
private String minSdkVersion;
private String targetSdkVersion;
private boolean allowBackup;
private String icon;
private String lable;
private String theme;
private String activityName;
private String activityLable;
private String action;
private String category;
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getmXmlns() {
return mXmlns;
}
public void setmXmlns(String mXmlns) {
this.mXmlns = mXmlns;
}
public String getmPackage() {
return mPackage;
}
public void setmPackage(String mPackage) {
this.mPackage = mPackage;
}
public String getmVersionCode() {
return mVersionCode;
}
public void setmVersionCode(String mVersionCode) {
this.mVersionCode = mVersionCode;
}
public String getmVersionName() {
return mVersionName;
}
public void setmVersionName(String mVersionName) {
this.mVersionName = mVersionName;
}
public String getMinSdkVersion() {
return minSdkVersion;
}
public void setMinSdkVersion(String minSdkVersion) {
this.minSdkVersion = minSdkVersion;
}
public String getTargetSdkVersion() {
return targetSdkVersion;
}
public void setTargetSdkVersion(String targetSdkVersion) {
this.targetSdkVersion = targetSdkVersion;
}
public boolean isAllowBackup() {
return allowBackup;
}
public void setAllowBackup(boolean allowBackup) {
this.allowBackup = allowBackup;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public String getLable() {
return lable;
}
public void setLable(String lable) {
this.lable = lable;
}
public String getTheme() {
return theme;
}
public String getActivityName() {
return activityName;
}
public void setActivityName(String activityName) {
this.activityName = activityName;
}
public String getActivityLable() {
return activityLable;
}
public void setActivityLable(String activityLable) {
this.activityLable = activityLable;
}
public void setTheme(String theme) {
this.theme = theme;
}
}
这个是解析xml过程中需要把数据封装的对象
package com.example.xml_pullparse;
import java.io.InputStream;
import org.xml.sax.Parser;
import org.xmlpull.v1.XmlPullParser;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.Log;
/**
* 使用pull方式解析xml
* @author Administrator
*示例将要解析清单文件
*/
public class PullParseUtil {
private static final String TAG="PullParseUtil";
private Context mContext;
private XmlPullParser mXmlPullParser;
public PullParseUtil(Context context,XmlPullParser parser) {
this.mContext=context;
this.mXmlPullParser=parser;
}
public ManifestObjective pullParseXml(InputStream is) throws Exception{
ManifestObjective obj=null;
mXmlPullParser.setInput(is, "UTF-8");
//开始解析事件
int eventType=mXmlPullParser.getEventType();
Log.i(TAG, "解析eventType="+eventType);
//处理事件,没有碰到文档结尾就一直处理
while(eventType!=XmlPullParser.END_DOCUMENT){
//根据标签来处理事件
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
//开始初始化资源,或者不做任何操作
obj = new ManifestObjective();
break;
case XmlPullParser.START_TAG:
//解析xml节点数据,获取当前标签名字
String tagName=mXmlPullParser.getName();
Log.i(TAG, "解析TagName ="+tagName);
if(tagName.trim().equals("manifest")){
obj.setmXmlns(mXmlPullParser.getAttributeValue(0));
obj.setmPackage(mXmlPullParser.getAttributeValue(1));
obj.setmVersionCode(mXmlPullParser.getAttributeValue(2));
obj.setmVersionName(mXmlPullParser.getAttributeValue(3));
Log.i(TAG, "解析TagName value="+obj.getmPackage()+obj.getmVersionCode()+obj.getmVersionCode()+obj.getmVersionName());
mXmlPullParser.next();//这个放在这里最后面,放在前面getAttributeValue返回有问题。
}else if(tagName.trim().equals("uses-sdk")){
obj.setMinSdkVersion(mXmlPullParser.getAttributeValue(0));
obj.setTargetSdkVersion(mXmlPullParser.getAttributeValue(1));
Log.i(TAG, "解析TagName value="+obj.getMinSdkVersion()+obj.getTargetSdkVersion());
mXmlPullParser.next();//这个放在这里最后面,放在前面getAttributeValue返回有问题。
}else if(tagName.trim().equals("application")){
obj.setAllowBackup(mXmlPullParser.getAttributeValue(0).equals("true")?true:false);
obj.setIcon(mXmlPullParser.getAttributeValue(1));//这里直接获取的资源的字符串,转成drawable不会。
obj.setLable(mXmlPullParser.getAttributeValue(2));
obj.setTheme(mXmlPullParser.getAttributeValue(3));
Log.i(TAG, "解析TagName value="+obj.isAllowBackup()+obj.getIcon().toString()+obj.getLable()+obj.getTheme());
mXmlPullParser.next();//这个放在这里最后面,放在前面getAttributeValue返回有问题。
}else if(tagName.trim().equals("activity")){
obj.setActivityName(mXmlPullParser.getAttributeValue(0));
obj.setActivityLable(mXmlPullParser.getAttributeValue(1));
Log.i(TAG, "解析TagName value="+obj.getActivityName()+obj.getActivityLable());
mXmlPullParser.next();//这个放在这里最后面,放在前面getAttributeValue返回有问题。
}
else if(tagName.trim().equals("intent-filter")){//这里面没有属性值,不解析但是要mXmlPullParser.next()把事件驱动到下一个
mXmlPullParser.next();//这个放在这里最后面,放在前面getAttributeValue返回有问题。
}
else if(tagName.trim().equals("action")){
obj.setAction(mXmlPullParser.getAttributeValue(0));
Log.i(TAG, "解析TagName value="+obj.getAction());
mXmlPullParser.next();//这个放在这里最后面,放在前面getAttributeValue返回有问题。
}
else if(tagName.trim().equals("category")){
obj.setCategory(mXmlPullParser.getAttributeValue(0));
Log.i(TAG, "解析TagName value="+obj.getCategory());
mXmlPullParser.next();//这个放在这里最后面,放在前面getAttributeValue返回有问题。
}
break;
case XmlPullParser.END_TAG:
//这里不做处理,根据xml文件格式自己需要处理就写
break;
}
//这里很重要,指导解析器进入下一个事件,解析。不然你的eventType就只有START_DOCUMENT
eventType=mXmlPullParser.next();
Log.i(TAG, "驱动到下一个eventType="+eventType);
}
Log.i(TAG, "最后返回="+obj.getCategory());
return obj;
}
}
这个是解析xml的类
这个是mainactivity的布局文件。测试xml的解析,显示解析结果
package com.example.xml_pullparse;
import java.io.IOException;
import java.io.InputStream;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements OnClickListener{
private PullParseUtil mPullParseUtil;
private Button mButton;
private TextView mTextView;
private ManifestObjective obj;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
mButton=(Button) findViewById(R.id.show_mainfist);
mButton.setOnClickListener(this);
mTextView=(TextView) findViewById(R.id.tv_showmainfist);
}
private Handler mHandler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
//在这里更新UI
if(obj!=null){
mTextView.setText("<manifest\t"+"xmlns:android="+"\""+obj.getmXmlns()+"\""+"\n"+"package="+"\""+obj.getmPackage()+"\""+"\n"
+"android:versionCode="+"\""+obj.getmVersionCode()+"\""+"\n"+"\""+"android:versionName="+obj.getmVersionName()+"\""+">"+"\n"
+"<uses-sdk"+"\nandroid:minSdkVersion="+"\""+obj.getMinSdkVersion()+"\""+"\n"+"android:targetSdkVersion="+"\""+obj.getTargetSdkVersion()+"\""+"/>"+"\n"
);
}else{
Log.e("Tag", "pull解析返回mull对象");
}
}
};
@Override
public void onClick(View view) {
try {
XmlPullParser parser=XmlPullParserFactory.newInstance().newPullParser();
mPullParseUtil=new PullParseUtil(this, parser);
InputStream is=getResources().getAssets().open("AndroidManifest.xml");//这里不知道怎么获取清单文件作为输入流,只能copy后放到assets中了
try {
obj=mPullParseUtil.pullParseXml(is);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Message msg=Message.obtain();
mHandler.sendMessage(msg);
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
在activity里面我们测试了一下,这里只是把前面一部分显示出来,太麻烦了,结果是正确的。后面就不写了,纯属浪费时间
- Android Pull解析xml
- android pull 解析xml
- android PULL 解析XML
- Android Pull解析xml
- Android Pull 解析 XML
- Android Pull 解析 XML
- Android Pull解析xml
- Android PULL解析XML
- Android Pull解析xml
- Android PULL解析XML
- android xml-----Pull解析
- android pull解析xml
- Android Pull 解析 Xml
- Android Pull解析xml
- Android PULL解析XML
- Android XML Pull解析
- android,pull解析xml
- android PULL解析XML
- 0 1背包状态压缩
- aiml语言python对话系统构建
- 和数学家一样思考的10种方法
- css代码技术栈(一):CSS实现单行、多行文本溢出显示省略号(…)
- 机房讨论有感
- android pull解析XML
- 兔子的烦恼(一)
- 用标签显示用户列表及Value Stack和Stack Context
- Svn与Git的区别
- 内部类和匿名内部类
- TCP 的那些事儿(上)
- 1065. 单身狗(25)
- 一份快速实用的 tcpdump 命令参考手册
- Linux wget断点续传,限速下载