微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SAX 解析XML 文件

使用 SAX 解析XML 文件,不说那么多,贴代码

解析xml:


package com.example.xmldemo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

/**
 * 任务图形xml解析
 * @author cyj
 *
 */
public class XMLPaserHandle extends DefaultHandler {
	final int MISSION = 1;
    final int ESRIGEOMETRYPOINT = 2;//点
    final int RECORD = 3;
    final int FID = 4;
    final int NAME = 5;
    final int GUID = 6;
    final int POINTS = 7;
    final int ESRIGEOMETRYpolyLINE = 8;//线
    final int ESRIGEOMETRYpolyGON = 9;//面
    
    int currentstate = 0;
	int recordState = 0;
	private Map<String,List<MissionRecordPO>> missions;
	/**点**/
	private List<MissionRecordPO> pointMissionRecordPO;
	/**线**/
	private List<MissionRecordPO> polylineMissionRecordPO;
	/**面**/
	private List<MissionRecordPO> polygonMissionRecordPO;
	/**记录**/
	private MissionRecordPO missionRecordPO;
	
	/**<mission guid="dec20ec7-e019-41c1-9ec0-9b57792eb27b"> 对应guid**/
	private String missionGuid = null;
	
	public XMLPaserHandle(){}
	public Map<String,List<MissionRecordPO>> getMissions(){
		return this.missions;
	}
	@Override
    public void startDocument() throws SAXException {
		missions = new HashMap<String,List<MissionRecordPO>>();
    }
    
    @Override
    public void endDocument() throws SAXException {
        
    }
    
    @Override
    public void startElement(String uri,String localName,String qName,Attributes attributes) throws SAXException {
    	//String missionGuid = attributes.getValue("guid");
        if(localName.equalsIgnoreCase("mission")){
        	missionGuid = attributes.getValue("guid");
        	
            currentstate = 0;
            return;
        }
        if(localName.equalsIgnoreCase(MissionRecordPO.IMPORT_XML_NODE_NAME_POINT)){
        	pointMissionRecordPO = new ArrayList<MissionRecordPO>();
        	currentstate = ESRIGEOMETRYPOINT;
            return;
        }
        if(localName.equalsIgnoreCase(MissionRecordPO.IMPORT_XML_NODE_NAME_polyLINE)){
        	polylineMissionRecordPO = new ArrayList<MissionRecordPO>();
        	currentstate = ESRIGEOMETRYpolyLINE;
            return;
        }
        if(localName.equalsIgnoreCase(MissionRecordPO.IMPORT_XML_NODE_NAME_polyGON)){
        	polygonMissionRecordPO = new ArrayList<MissionRecordPO>();
            currentstate = ESRIGEOMETRYpolyGON;
            return;
        }
        if(localName.equalsIgnoreCase("record")){
        	missionRecordPO = new MissionRecordPO();
        	missionRecordPO.setMissionGuid(missionGuid);
            //currentstate = RECORD;
            return;
        }
        if(localName.equalsIgnoreCase("fid")){
        	recordState = FID;
            return;
        }
        if(localName.equalsIgnoreCase("name")){
        	recordState = NAME;
            return;
        }
        if(localName.equalsIgnoreCase("guid")){
        	recordState = GUID;
        	return;
        }
        if(localName.equalsIgnoreCase("points")){
        	recordState = POINTS;
        	return;
        }
        recordState = 0;
        currentstate = 0;
    }
    
    @Override
    public void endElement(String uri,String qName)
            throws SAXException {
        // Todo Auto-generated method stub
        if(localName.equalsIgnoreCase("mission")){
            return;
        }
        if(localName.equalsIgnoreCase(MissionRecordPO.IMPORT_XML_NODE_NAME_POINT)){
        	missions.put(MissionRecordPO.IMPORT_XML_NODE_NAME_POINT,pointMissionRecordPO);
        	return;
        }
        if(localName.equalsIgnoreCase(MissionRecordPO.IMPORT_XML_NODE_NAME_polyLINE)){
        	missions.put(MissionRecordPO.IMPORT_XML_NODE_NAME_polyLINE,polylineMissionRecordPO);
        	return;
        }
        if(localName.equalsIgnoreCase(MissionRecordPO.IMPORT_XML_NODE_NAME_polyGON)){
        	missions.put(MissionRecordPO.IMPORT_XML_NODE_NAME_polyGON,polygonMissionRecordPO);
        	return;
        }
        if(localName.equalsIgnoreCase("record")){
        	if(ESRIGEOMETRYPOINT == currentstate){
        		pointMissionRecordPO.add(missionRecordPO);
        	}else if(ESRIGEOMETRYpolyLINE == currentstate){
        		polylineMissionRecordPO.add(missionRecordPO);
        	}else if(ESRIGEOMETRYpolyGON == currentstate){
        		polygonMissionRecordPO.add(missionRecordPO);
        	}
        	return;
        }
    }
    
    @Override
    public void characters(char[] ch,int start,int length)
            throws SAXException {
        // Todo Auto-generated method stub
        String theString = new String(ch,start,length);
        theString = theString.trim();
        if(null == theString || "".equals(theString) || "\n".equals(theString)){
        	//currentstate = 0;
        	return;
        }    
        switch(recordState){
        case FID:
        	missionRecordPO.setFid(theString);
           // currentstate = 0;
            break;
        case NAME:
        	missionRecordPO.setName(theString);
            //currentstate = 0;
            break;
        case GUID:
        	missionRecordPO.setGuid(theString);
            //currentstate = 0;
            break;
        case POINTS:
        	missionRecordPO.setPoints(theString);
           // currentstate = 0;
            break;
       
        default:
            return;
        }
    }
}



Activity显示解析内容


package com.example.xmldemo;

import java.io.IOException;
import java.util.List;
import java.util.Map;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.ContentValues;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//final String path ="file://" + Environment.getExternalStorageDirectory() + "/xmldemo/任务图形.xml";
		//Log.i("path",path);
		Button btnPare = (Button) findViewById(R.id.btn_parse);
		btnPare.setonClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				LinearLayout ll = (LinearLayout) findViewById(R.id.pase);
				ll.setVisibility(View.VISIBLE);
				dealImportData(null);
			}
		});
		
	}

	@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;
	}

	public void dealImportData(String path) {
		Map<String,List<MissionRecordPO>> missions = xmltaskGraphicHandle(path);
		List<MissionRecordPO> importPoints = missions
				.get(MissionRecordPO.IMPORT_XML_NODE_NAME_POINT);
		List<MissionRecordPO> importpolylines = missions
				.get(MissionRecordPO.IMPORT_XML_NODE_NAME_polyLINE);
		List<MissionRecordPO> importpolygons = missions
				.get(MissionRecordPO.IMPORT_XML_NODE_NAME_polyGON);
		
		if (null != importPoints) {// 点
			TextView tvPoint = (TextView) findViewById(R.id.point);
			tvPoint.setText(importPoints.get(0).getPoints());//第一条记录,下同

		}
		if (null != importpolylines) {// 线
			TextView tvLine = (TextView) findViewById(R.id.polyline);
			tvLine.setText(importpolylines.get(0).getPoints());
		}
		if (null != importpolygons) {// 面
			TextView tvgon = (TextView) findViewById(R.id.polygon);
			tvgon.setText(importpolygons.get(0).getPoints());
		}
	}

	private Map<String,List<MissionRecordPO>> xmltaskGraphicHandle(String path) {
		Map<String,List<MissionRecordPO>> missions = null;
		try {
			SAXParserFactory factory = SAXParserFactory.newInstance();
			SAXParser parser = factory.newSAXParser();
			XMLReader reader = parser.getXMLReader();
			XMLPaserHandle handler = new XMLPaserHandle();
			reader.setContentHandler(handler);
			InputSource is = new InputSource(this.getClassLoader().getResourceAsstream("任务图形.xml"));
			reader.parse(is);
			missions = handler.getMissions();
		} catch (ParserConfigurationException e) {
			e.printstacktrace();
		} catch (SAXException e) {
			e.printstacktrace();
		} catch (IOException e) {
			e.printstacktrace();
		}

		return missions;

	}

}



源码下载地址: http://download.csdn.net/download/chenyujia2010/5425497

原文地址:https://www.jb51.cc/xml/300426.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。