解析xml步骤整理(使用XmlPullParser)

1解析的xml如下
gxzw.xml

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>

<问答1 title="一般抵押权首次登记" content="一、申请材料n"  />

2application中进行解析

public static ArrayList<GxzwItem> gxzwdata = new ArrayList<GxzwItem>();

//将sd卡中xml的内容解析到内存中
private static void initQxzwData() {
		// TODO Auto-generated method stub
		String path = null;
		Log.e("wy", "初始化gxzw");
		try {
			if (Store.getLanguageLocal(navContext).equals("en")) {
				Log.e("wy", "初始化英文版gxzw");
				path = "/mnt/sdcard/leotech/settings/qa_en.xml";
			} else {
				Log.e("wy", "初始化中文版gxzw");
				path = "/mnt/sdcard/leotech/settings/gxzw.xml";
			}

			FileInputStream is = new FileInputStream(new File(path));
			SpeechClientApp.gxzwdata.clear();
			//至此完成xml的内容向内存实体类的转化
			SpeechClientApp.gxzwdata = GxzwParser.getInstance(navContext).readQAXml(is);
			Log.e("wy", "gxzwdata内容" + gxzwdata.toString());
			Log.e("wy", "gxzwdata.isize=" + gxzwdata.size());
		} catch (Exception e) {

		}
	}

3xml解析类:使用了XmlPullParser类进行了解析

public class GxzwParser {
	private final static String TAG = GxzwParser.class.getSimpleName();
	private Context mContext;

	public GxzwParser(Context context){
		mContext = context;
	}
	
	private static GxzwParser instance=null;

	public static GxzwParser getInstance(Context context){		
		if(instance ==null){
			instance = new GxzwParser(context);
		}
		return instance;		
	}

	public ArrayList<GxzwItem> readQAXml(InputStream is){

		ArrayList<GxzwItem> items = new ArrayList<GxzwItem>();
		
		items=parseGxzwXml(is);
		Log.v(TAG,"items="+items.size());
		return items;
	}
	
	
	
	private ArrayList<GxzwItem> parseGxzwXml(InputStream is) {
		// TODO 自动生成的方法存根
		XmlPullParser parser = Xml.newPullParser();
		ArrayList<GxzwItem> items = new ArrayList<GxzwItem>();
		int eventType;
		String name= null;
		try {
			parser.setInput(is, "UTF-8");
		
			eventType = parser.getEventType();
			while(eventType!=XmlPullParser.END_DOCUMENT){			
				switch(eventType){
				case XmlPullParser.START_DOCUMENT:
					break;
				case XmlPullParser.START_TAG:
					name = parser.getName();

					if(name.equalsIgnoreCase("config")){
						
					}else{

						GxzwItem item = new GxzwItem();
						String title =parser.getAttributeValue(null, "title");
						String content =parser.getAttributeValue(null, "content");
						String quest =parser.getAttributeValue(null, "question");
						String answer =parser.getAttributeValue(null, "answer");
						String valid =parser.getAttributeValue(null, "valid");
						String xml =parser.getAttributeValue(null, "xml");
						String dest =parser.getAttributeValue(null, "dest");
						String action =parser.getAttributeValue(null, "action");
						String url =parser.getAttributeValue(null, "url");
						String activity =parser.getAttributeValue(null, "activity");
						String menu1 =parser.getAttributeValue(null, "menu1");
						String menu2 =parser.getAttributeValue(null, "menu2");
						String map =parser.getAttributeValue(null, "map");
						String web =parser.getAttributeValue(null, "web");
						Log.v(TAG,"name-"+name+" quest="+quest+" answer="+answer+" xml="+xml+" valid="+valid+" dest="+dest
								+" action="+action+" url="+url+" activity="+activity+" menu1="+menu1+" menu2="+menu2
								+" map="+map+" web="+web);
						Log.e("wy","title:"+title+"content"+content+"name="+name+" quest="+quest+" answer="+answer+" xml="+xml+" valid="+valid+" dest="+dest
								+" action="+action+" url="+url+" activity="+activity+" menu1="+menu1+" menu2="+menu2
								+" map="+map+" web="+web);
						//通过实体类的set访问把解析到的xml配置属性替换原先默认的属性
						item.setTitle(title);
						item.setContent(content);
						item.setName(name);
						item.setQuestion(quest);
						item.setAnswer(answer);
						item.setXml(xml);
						item.setValid(valid);
						item.setDest(dest);
						item.setAction(action);
						item.setUrl(url);
						item.setActivity(activity);
						item.setMenu1(menu1);
						item.setMenu2(menu2);
						item.setmMap(map);
						item.setmWeb(web);
						items.add(item);
					}
					break;
				case XmlPullParser.END_TAG:
					break;

				}
				eventType=parser.next();
			}
			is.close();
			return items;
		} catch (XmlPullParserException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			Log.v("wy","e2="+e);
			showErrorLine(name);
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
			Log.v("wy","e1="+e);
		}
		return null;
		
		
	}

	private void showErrorLine(final String name){
		Log.d("wy", "qa解析错误,在 <"+name+"> 这一行或者下一行");
	}
	
}

4 具体的对应实体类:只用到了title和content两个属性

public class GxzwItem {
	private String title;
	private String content;
	private String name;
	private String mQuestion = null;
	private String mAnswer = null;
	private String mXml = null;
	private String mValid= null;
	private String mDest = null;
	private String mAction= null;
	private String mUrl = null;	
	private String mActivity= null;
	private String mMenu1 = null;	
	private String mMenu2= null;
	private String mMap= null;
	private String mWeb= null;
	
	
	
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getmWeb() {
		return mWeb;
	}
	public void setmWeb(String mWeb) {
		this.mWeb = mWeb;
	}
	public String getmMap() {
		return mMap;
	}
	public void setmMap(String mMap) {
		this.mMap = mMap;
	}
	public void setName(String nameString){
		name= nameString;
	}
	public String getName(){
		return name;
	}
	public void setQuestion(String quest){
		mQuestion = quest;
	}
	
	public String getQuestion(){
		return mQuestion;
	}
	public void setAnswer(String answer){
		mAnswer = answer;
	}
	
	public String getAnswer(){
		return mAnswer;
	}
	public void setXml(String xml){
		mXml = xml;
	}
	
	public String getXml(){
		return mXml;
	}
	public void setDest(String dest){
		mDest = dest;
	}
	
	public String getDest(){
		return mDest;
	}	
	public String getAction(){
		return mAction;
	}
	public void setAction(String action){
		mAction = action;
	}
	
	public String getUrl(){
		return mUrl;
	}
	public void setUrl(String Url){
		mUrl = Url;
	}	
	public void setValid(String valid){
		mValid = valid;
	}
	public String getValid(){
		return mValid;
	}
	public void setActivity(String name){
		mActivity = name;
	}
	public String getActivity(){
		return mActivity;
	}	
	public void setMenu1(String name){
		mMenu1 = name;
	}
	public String getMenu1(){
		return mMenu1;
	}	
	public void setMenu2(String name){
		mMenu2 = name;
	}
	public String getMenu2(){
		return mMenu2;
	}	
}

5具体调用:核心代码

mTitle=SpeechClientApp.gxzwdata.get(10).getTitle();
// 换行,去空格
		mContentAct=SpeechClientApp.gxzwdata.get(10).getContent().replace("n", "\n").replace(" ", "");

		

全代码

public class XZSPActivity extends WyBaseActivity implements RadioGroup.OnCheckedChangeListener {
	private TextView mGxzwTv;
	private TextView mGxzwTvTitle;
	private String mTitle;
	private String mTitle1;
	private String mTitle2;
	private String mTitle3;
	private String mTitle4;
	private String mTitle5;
	private String mTitle6;
	private String mTitle7;
	private String mTitle8;
	private String mTitle9;
	
	private String mContent;
	private String mContentAct;
	private String mContentAct1;
	private String mContentAct2;
	private String mContentAct3;
	private String mContentAct4;
	private String mContentAct5;
	private String mContentAct6;
	private String mContentAct7;
	private String mContentAct8;
	private String mContentAct9;
	private RadioGroup rgNavi;
	private RelativeLayout mRelativeLayout;
    private RadioButton mRBqxn;
    private RadioButton mRBqxn1;
    private RadioButton mRBqxn2;
    private RadioButton mRBqxn3;
    private RadioButton mRBqxn4;
    private RadioButton mRBqxn5;
    private RadioButton mRBqxn6;
    private RadioButton mRBqxn7;
    private RadioButton mRBqxn8;
    private RadioButton mRBqxn9;
    private RadioButton rbNaviDingdan;
    private RadioButton rbNaviGerenxinxi;
// private ImageView daijie_img, yijie_img, shuxin;
    private ImageView img_gxzw;
    private long temptime = 0;
	
	public void onClick(View v){
		switch (v.getId()) {

		case R.id.btn_evaluate_home:
			Intent intent = new Intent(this, SpeechMainActivity.class);
			startActivity(intent);
			break;
		case R.id.layout_home_activity_root:
			Log.e("wy", "点击了全局");
			SpeechTools.delayToReturn();
			break;
		case R.id.rg_navi:
			Log.e("wy", "点击了RadioGroup");
			SpeechTools.delayToReturn();
			break;
		case R.id.sv_content:
			Log.e("wy", "点击了scrollview");
			SpeechTools.delayToReturn();
			break;
		
		
		default:
			Log.e("wy", "重新计时退出");
			SpeechTools.delayToReturn();
			break;
		}
	}
	@Override
	public int setRootView() {
		return R.layout.activity_xzsp;
	}
	@Override
	public void initViews() {
	
		mRelativeLayout = (RelativeLayout) findViewById(R.id.layout_home_activity_root);
		rgNavi = (RadioGroup) findViewById(R.id.rg_navi);
		rgNavi.setOnCheckedChangeListener( this);
	    mRBqxn = (RadioButton) findViewById(R.id.rb_quanxiannei);
	    mRBqxn1 = (RadioButton) findViewById(R.id.rb_teshucheliang);
	    mRBqxn2 = (RadioButton) findViewById(R.id.rb_gongreqiye);
	    mRBqxn3 = (RadioButton) findViewById(R.id.rb_gongrejingying);
	    mRBqxn4 = (RadioButton) findViewById(R.id.rb_ranqijingying);
	    mRBqxn5 = (RadioButton) findViewById(R.id.rb_yanhuabaozhu);
	    mRBqxn6 = (RadioButton) findViewById(R.id.rb_fangwujianzhu);
	    mRBqxn7 = (RadioButton) findViewById(R.id.rb_chengshigongre);
	    mRBqxn8 = (RadioButton) findViewById(R.id.rb_xinzengyongshui);
	    mRBqxn9 = (RadioButton) findViewById(R.id.rb_yuanlingongcheng);
// img_gxzw=(ImageView) findViewById(R.id.img_gxzw);
        mGxzwTv=(TextView)findViewById(R.id.tv_gxzw);
        mGxzwTvTitle=(TextView)findViewById(R.id.tv_estatetitle);
	    
		mTitle=SpeechClientApp.gxzwdata.get(10).getTitle();
		mTitle1=SpeechClientApp.gxzwdata.get(11).getTitle();
		mTitle2=SpeechClientApp.gxzwdata.get(12).getTitle();
		mTitle3=SpeechClientApp.gxzwdata.get(13).getTitle();
		mTitle4=SpeechClientApp.gxzwdata.get(14).getTitle();
		mTitle5=SpeechClientApp.gxzwdata.get(15).getTitle();
		mTitle6=SpeechClientApp.gxzwdata.get(16).getTitle();
		mTitle7=SpeechClientApp.gxzwdata.get(17).getTitle();
		mTitle8=SpeechClientApp.gxzwdata.get(18).getTitle();
		mTitle9=SpeechClientApp.gxzwdata.get(19).getTitle();
// mContent=SpeechClientApp.gxzwdata.get(0).getContent();
		Log.e("wy", "获取到xml的answer"+mTitle);
// Log.e("wy", "获取到xml"+mContent);
// 换行,去空格
		mContentAct=SpeechClientApp.gxzwdata.get(10).getContent().replace("n", "\n").replace(" ", "");
		mContentAct1=SpeechClientApp.gxzwdata.get(11).getContent().replace("n", "\n").replace(" ", "");
		mContentAct2=SpeechClientApp.gxzwdata.get(12).getContent().replace("n", "\n").replace(" ", "");
		mContentAct3=SpeechClientApp.gxzwdata.get(13).getContent().replace("n", "\n").replace(" ", "");
		mContentAct4=SpeechClientApp.gxzwdata.get(14).getContent().replace("n", "\n").replace(" ", "");
		mContentAct5=SpeechClientApp.gxzwdata.get(15).getContent().replace("n", "\n").replace(" ", "");
		mContentAct6=SpeechClientApp.gxzwdata.get(16).getContent().replace("n", "\n").replace(" ", "");
		mContentAct7=SpeechClientApp.gxzwdata.get(17).getContent().replace("n", "\n").replace(" ", "");
		mContentAct8=SpeechClientApp.gxzwdata.get(18).getContent().replace("n", "\n").replace(" ", "");
		mContentAct9=SpeechClientApp.gxzwdata.get(19).getContent().replace("n", "\n").replace(" ", "");
		Log.e("wy", "获取到mXmlAct:"+mContentAct);
// mContent="申报材料\n1、申报文书";
	    mRBqxn.setText(mTitle);
	    mRBqxn1.setText(mTitle1);
	    mRBqxn2.setText(mTitle2);
	    mRBqxn3.setText(mTitle3);
	    mRBqxn4.setText(mTitle4);
	    mRBqxn5.setText(mTitle5);
	    mRBqxn6.setText(mTitle6);
	    mRBqxn7.setText(mTitle7);
	    mRBqxn8.setText(mTitle8);
	    mRBqxn9.setText(mTitle9);
	    
       

        mGxzwTvTitle.setText(mTitle);
        mGxzwTv.setText(mContentAct);
        
	}
	@Override
	 public void onCheckedChanged(RadioGroup mRadioGroup, int mI) {
       switch (mI){//switch...case事件把RadioButton底部导航栏与对应的Fragment联系起来了
           case R.id.rb_quanxiannei:
        	   Log.e("wy", "点击了第一个RudioButton");
        	   SpeechTools.delayToReturn();
        	   mGxzwTvTitle.setText(mTitle);
        	   mGxzwTv.setText(mContentAct);
// showFrag(mHomeFragment);
// img_gxzw.setImageResource(R.drawable.ic_65);
               break;
           case R.id.rb_teshucheliang:
        	   SpeechTools.delayToReturn();
        	   mGxzwTvTitle.setText(mTitle1);
        	   mGxzwTv.setText(mContentAct1);
               break;
           case R.id.rb_gongreqiye:
        	   mGxzwTvTitle.setText(mTitle2);
        	   mGxzwTv.setText(mContentAct2);
               break;
           case R.id.rb_gongrejingying:
        	   mGxzwTvTitle.setText(mTitle3);
        	   mGxzwTv.setText(mContentAct3);
        	   break;
           case R.id.rb_ranqijingying:
        	   mGxzwTvTitle.setText(mTitle4);
        	   mGxzwTv.setText(mContentAct4);
        	   break;
           case R.id.rb_yanhuabaozhu:
        	   mGxzwTvTitle.setText(mTitle5);
        	   mGxzwTv.setText(mContentAct5);
        	   break;
           case R.id.rb_fangwujianzhu:
        	   mGxzwTvTitle.setText(mTitle6);
        	   mGxzwTv.setText(mContentAct6);
        	   break;
           case R.id.rb_chengshigongre:
        	   mGxzwTvTitle.setText(mTitle7);
        	   mGxzwTv.setText(mContentAct7);
        	   break;
           case R.id.rb_xinzengyongshui:
        	   mGxzwTvTitle.setText(mTitle8);
        	   mGxzwTv.setText(mContentAct8);
        	   break;
           case R.id.rb_yuanlingongcheng:
        	   mGxzwTvTitle.setText(mTitle9);
        	   mGxzwTv.setText(mContentAct9);
        	   break;

       }

       }
	@Override
	public void initDatas() {
		  String answer = getIntent().getStringExtra("answer");
			if (answer != null) {
				SpeechTools.speak(answer);
			}else {
				 mRBqxn.setChecked(true);
			}
			int menu1= getIntent().getIntExtra("menu1", 0);
			switch (menu1) {
			case 0:
				mRBqxn.setChecked(true);
				mGxzwTvTitle.setText(mTitle);
	        	mGxzwTv.setText(mContentAct);
				break;
			case 1:
				mRBqxn1.setChecked(true);
				mGxzwTvTitle.setText(mTitle1);
				mGxzwTv.setText(mContentAct1);
				break;
			case 2:
				mRBqxn2.setChecked(true);
				mGxzwTvTitle.setText(mTitle2);
				mGxzwTv.setText(mContentAct2);
				break;
			case 3:
				mRBqxn3.setChecked(true);
				mGxzwTvTitle.setText(mTitle3);
				mGxzwTv.setText(mContentAct3);
				break;
			case 4:
				mRBqxn4.setChecked(true);
				mGxzwTvTitle.setText(mTitle4);
				mGxzwTv.setText(mContentAct4);
				break;
			case 5:
				mRBqxn5.setChecked(true);
				mGxzwTvTitle.setText(mTitle5);
				mGxzwTv.setText(mContentAct5);
				break;
			case 6:
				mRBqxn6.setChecked(true);
				mGxzwTvTitle.setText(mTitle6);
				mGxzwTv.setText(mContentAct6);
				break;
			case 7:
				mRBqxn7.setChecked(true);
				mGxzwTvTitle.setText(mTitle7);
				mGxzwTv.setText(mContentAct7);
				break;
			case 8:
				mRBqxn8.setChecked(true);
				mGxzwTvTitle.setText(mTitle8);
				mGxzwTv.setText(mContentAct8);
				break;
			case 9:
				mRBqxn9.setChecked(true);
				mGxzwTvTitle.setText(mTitle9);
				mGxzwTv.setText(mContentAct9);
				break;

			default:
				break;
			}
// 底部语音交互
		ViewControllerSimple v = new ViewControllerSimple(this, findViewById(R.id.view_bottom));
		v.setVisibility(View.VISIBLE);
		SpeechTools.scheduleToReturn();
	}

	
	}

父类

public abstract class WyBaseActivity extends FragmentActivity {
    //封装自己,经常作为上下文用
    public WyBaseActivity mBaseActivity;
    public FragmentManager mFragmentManager;
    public LayoutInflater mLayoutInflater;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        mLayoutInflater=this.getLayoutInflater();
        mBaseActivity=this;
        mFragmentManager=this.getSupportFragmentManager();
        setContentView(setRootView());
        initViews();
        initDatas();
    }
    
    //设置布局
    public abstract int setRootView();
    
    //初始化布局View
    public abstract void initViews();
    
    //初始化布局数据
    public abstract void initDatas();
    
    
    //打吐司
    public void showToast(String text){
      showToast(text,Toast.LENGTH_SHORT);
    }
    public void showToast(String text,int length){
        Toast.makeText(mBaseActivity, text, length).show();
    }
    
    //自杀
    public void killSelf(){
        finish();
    }
// //打log
// public void loge(){
// LogUtil.logE();
// }
    
    //跳转到其他Activity
    public void startActvity(Class activity){
        Intent intent=new Intent(mBaseActivity,activity);
        startActivity(intent);
    }
    //启动服务
    public void startService(Class service){
        Intent intent=new Intent(mBaseActivity,service);
        startService(intent);
    }
    //发送广播
    public void sendBroadcast(Class receiver){
        Intent intent=new Intent(mBaseActivity,receiver);
        sendBroadcast(intent);
    }
    
    //对于Fragment的操作
    public  void addFragment(int des, BaseFragment fragment){
        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
        fragmentTransaction.add(des,fragment,fragment.tag);
        fragmentTransaction.commit();
    }
    public  void removeFragment( BaseFragment fragment){
        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
        fragmentTransaction.remove(fragment);
        fragmentTransaction.commit();
    }
    public  void replaceFragment(int des, BaseFragment fragment){
        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
        fragmentTransaction.replace(des,fragment,fragment.tag);
        fragmentTransaction.commit();
    }
    public  void hideFragment(BaseFragment fragment){
        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
        fragmentTransaction.hide(fragment);
        fragmentTransaction.commit();
    }
    public  void showFragment( BaseFragment fragment){
        FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
        fragmentTransaction.show(fragment);
        fragmentTransaction.commit();
    }
    
    
}
点赞