`

SAX PULL解析

 
阅读更多

SAX,本地解析:

 

try {
        	SAX(getAssets().open("data.xml"));
        } catch (Exception e) {
			e.printStackTrace();
     }

 

 

public void SAX(InputStream input) throws Exception {
			SAXParserFactory spf = SAXParserFactory.newInstance();
			SAXParser sp = spf.newSAXParser();

			XMLReader xReader = sp.getXMLReader();
			XMLAdressInfo xmlAdress = new XMLAdressInfo();
			xReader.setContentHandler(xmlAdress);

			xReader.parse(new InputSource(input));
			
			//获得所有的数据
			hashMap = xmlAdress.getData();
			//获得省市对应的数据
			provinceCity = xmlAdress.getCityData();
			
			Log.d("dfdfd", ""+provinceCity.size());
		}

 

 

public class XMLAdressInfo extends DefaultHandler{
	private String characters = "";
	private HashMap<String, HashMap<String, List<String>>> hashMap ;
	private HashMap<String, List<String>> hashMapCity ;
	private List<String> list;
	private String city;
	private String province;
	private HashMap<String, List<String>> provinceCity ;
	private List<String> cityList ;
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		super.characters(ch, start, length);
		String str = new String(ch, start, length);
		str = str.replace("\n", "");
		str = str.replace("\t", "");
		characters += str.trim();
	}


	@Override
	public void startDocument() throws SAXException {
		super.startDocument();
		hashMap = new HashMap<String, HashMap<String,List<String>>>();
		
		provinceCity = new HashMap<String, List<String>>();
	}

	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		super.startElement(uri, localName, qName, attributes);
		if(localName.equals("province")){
			province = attributes.getValue("name");
			hashMapCity = new HashMap<String, List<String>>();
			
			cityList = new ArrayList<String>();
		}
		
		if(localName.equals("city")){
			list = new ArrayList<String>();
			city = attributes.getValue("name");
		} 
	}


	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		super.endElement(uri, localName, qName);
		if(localName.equals("province")){
			hashMap.put(province, hashMapCity);
			
			provinceCity.put(province, cityList);
			
		}else if(localName.equals("city")){
			hashMapCity.put(city, list);
			
			cityList.add(city);
		}else if(localName.equals("district")){
			list.add(characters);
		}
		
		characters = "";
	}

	public HashMap<String, HashMap<String, List<String>>>  getData(){
		return hashMap;
	}
	
	public HashMap<String, List<String>> getCityData(){
		return provinceCity;
	}
}

 

PULL 解析:

 

        PpdAdInfo ppdAdInfo = null ;
		try {
			XmlPullParser parser = Xml.newPullParser(); 
//			XmlPullParser parser =  XmlPullParserFactory.newInstance().newPullParser();
//			parser.setInput(new StringReader(strResult));// 获得解析到的事件类别,这里有开始文档,结束文档,开始标签,结束标签,文本等等事件。
			parser.setInput(StringTOInputStream(strResult), "UTF-8");         
			
			int eventType = parser.getEventType();
			ppdAdInfosList = new ArrayList<PpdAdInfo>();
			
			while (eventType != XmlPullParser.END_DOCUMENT) {// 一直循环,直到文档结束
				switch (eventType) {
				case XmlPullParser.START_TAG:  
	                if (parser.getName().equals("ppdAd")) {  
	                	ppdAdInfo = new PpdAdInfo();  
	                } else if (parser.getName().equals("androidPackageName")) {  
	                    eventType = parser.next();  
	                    ppdAdInfo.setAndroidPackageName(parser.getText());  
	                } else if (parser.getName().equals("clickProxyURL")) {  
	                    eventType = parser.next();  
	                    ppdAdInfo.setClickProxyURL(parser.getText());  
	                } else if (parser.getName().equals("ppdCampaignId")) {  
	                    eventType = parser.next();  
	                    ppdAdInfo.setPpdCampaignId(parser.getText());  
	                } else if (parser.getName().equals("productThumbnail")) {  
	                    eventType = parser.next();  
	                    ppdAdInfo.setProductThumbnail(parser.getText());  
	                } else if (parser.getName().equals("productDescription")) {  
	                    eventType = parser.next();  
	                    ppdAdInfo.setProductDescription(parser.getText());  
	                } else if (parser.getName().equals("productName")) {  
	                    eventType = parser.next();  
	                    ppdAdInfo.setProductName(parser.getText());  
	                } else if (parser.getName().equals("rating")) {  
	                    eventType = parser.next();  
	                    ppdAdInfo.setRating(parser.getText());  
	                } 
	                break;  
				case XmlPullParser.END_TAG:  
	                if (parser.getName().equals("ppdAd")) {  
	                	ppdAdInfosList.add(ppdAdInfo);  
	                	ppdAdInfo = null;      
	                }  
	                break;  
				}
				 eventType = parser.next();  
			}

		} catch (Exception e) {
			Log.d("test", "eeee__" + e.getMessage());
			e.printStackTrace();
		}  

 

	/**  
     * 将String转换成InputStream  
     * @param in  
     * @return  
     * @throws Exception  
     */  
    public static InputStream StringTOInputStream(String in) throws Exception{  
          
        ByteArrayInputStream is = new ByteArrayInputStream(in.getBytes("ISO-8859-1"));  
        return is;  
    } 

 

分享到:
评论

相关推荐

    android sax pull解析方式

    而Pull解析器是Android平台特有的一种SAX解析实现,它进一步优化了内存使用,更适合移动设备的资源限制。 SAX Pull解析的核心思想是通过一个解析器从输入源读取XML文档,当遇到XML文档的开始标签、结束标签、文本...

    android SAX PULL 解析XML文件 代码 详解

    SAX解析适合大型XML文件和复杂结构,而PULL解析则适用于小型XML文件和简单结构。在提供的`SAXParseDemo`项目中,你可以找到具体的SAX解析实现,通过阅读和理解代码,可以更好地掌握这两种解析方法的使用。 总之,...

    Android中,使用SAX和PULL解析天气预报XML

    该文章详细介绍了在Android环境下如何使用SAX和PULL解析XML,包括代码示例和步骤说明,对于初学者来说非常有帮助。 最后,压缩包中的"Weather"文件很可能是示例的天气预报XML数据。通过实际解析这个文件,你可以更...

    dom.sax.pull解析

    Java解析XML的三种方式 Ø Android中,解析Xml数据的三种方式: Ø 1、DOM(org.w3c.dom) Ø “文档对象模型”方式,解析完的Xml将生成一个树状结构的对象。...Ø 类似于SAX方式,程序以“拉取”的方式对Xml进行解析。

    通过SAX和PULL来解析XML,同时生成xml

    1. 使用SAX或PULL解析XML,当遇到需要处理的元素时,将相关信息保存到内存或写入新的XML文件。 2. 在解析过程中,根据处理的事件生成相应的XML元素。如果是开始元素,就创建一个新的元素;如果是结束元素,就关闭...

    SAX,PULL,DOM解析XML

    PULL解析器是SAX解析的一种变体,同样基于事件驱动,但提供了更面向对象的API。开发者可以主动控制解析过程,通过调用方法向前移动解析器并获取下一个事件。这种方式适合于资源受限的环境,如移动设备,因为它允许按...

    Pull和SAX 解析的实例

    在Android开发中,处理XML数据是常见的任务,而Pull解析器和SAX解析器是两种常用的轻量级、低内存占用的XML解析方式。本文将详细介绍这两种解析方式,并通过一个具体的XmlPullParserDemo实例来深入理解它们的工作...

    Android sax pull dom 文件解析 示例

    XML解析主要有三种方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull解析器。下面将详细介绍这三种方法,并结合提供的"PullXmlDemo"文件,对Android中的XML解析进行深入探讨。 1. **SAX解析** ...

    android解析XML总结(SAX、Pull、Dom三种方式)

    本文将深入探讨三种在Android中解析XML的主要方法:SAX(Simple API for XML)、Pull解析器和DOM(Document Object Model),并结合代码实现进行详细阐述。 **1. SAX解析** SAX(Simple API for XML)是一种事件...

    数据的SAX与Pull解析

    本主题将深入探讨两种常见的解析方式:SAX(Simple API for XML)和Pull解析,这两种方法常用于服务器端的数据处理,以提供给用户高效且优化的数据服务。 SAX解析是一种事件驱动的解析方法,它不存储整个XML文档,...

    使用sax,pull,dom4j解析XML

    在Java中,有三种主要的解析XML的方式:SAX(Simple API for XML)、Pull解析器和DOM4J。下面将详细介绍这三种方法以及它们在Eclipse 4.8和Java 1.8环境下的使用。 1. **SAX解析器** SAX是一种基于事件驱动的解析...

    android xml 的解析 sax dom pull 解析

    PULL解析器(Pull Parser)是Android特有的解析方式,类似于SAX,也是事件驱动的,但它提供了一个简单的API,使得开发者可以通过调用`next()`方法来手动控制解析过程。PULL解析器内存效率高,易于使用,适合Android...

    Android SAX、DOM、Pull解析xml文件案例讲解

    本篇将详细讲解Android中三种主要的XML解析方式:SAX(Simple API for XML)、DOM(Document Object Model)和Pull解析器,并通过案例来帮助理解它们的工作原理和应用场景。 ### 1. SAX解析器 SAX(Simple API for...

    SAX,DOM,PULL解析示例

    PULL解析是Android平台上的特有解析方式,它类似于SAX解析,也是事件驱动的,但程序员控制解析过程,通过调用方法来“拉”下一个事件。PULL解析器适用于移动设备资源有限的情况,节省内存,并允许开发者根据需要控制...

    XML的pull和sax解析

    3. **代码复杂度**:SAX解析通常需要编写更多的事件处理器,而Pull解析可能需要更多的手动操作,具体取决于你的需求和偏好。 4. **性能**:两者在性能上相差不大,具体取决于应用的具体情况。 在学习和使用这两种...

    Sax,pull,DOM解析

    XML的解析方式有三种:SAX(Simple API for XML)、Pull解析和DOM(Document Object Model)解析。下面我们将详细探讨这三种解析方式及其特点。 1. **SAX解析**: SAX解析是一种基于事件驱动的解析方法,它不会一...

    Pull解析xml源码导入即可用

    在Android开发中,XML Pull解析相比SAX和DOM解析有其优势。例如,它不需要一次性加载整个XML文档,因此内存消耗小;同时,解析过程可以被中断,适合处理大文件。此外,由于其事件驱动的特性,代码结构清晰,易于理解...

    使用pull解析器解析和生成xml文件

    与SAX解析器类似,Pull解析器基于事件流,但提供了更灵活的控制,使得解析过程更为高效和直观。在Android开发中,Pull解析器被广泛应用于处理各种XML配置文件和数据文件。 ### 解析XML文件 在给定的示例中,我们有...

    pull解析器通用解析XML与生成XML

    在Android系统中,XML Pull解析器是一个轻量级、高效的解析XML文档的工具,它不需要DOM(Document Object Model)或者SAX(Simple API for XML)等完整的解析器支持。Pull解析器允许开发者通过事件驱动的方式顺序...

    Android ,SAX,DOM,PULL解析XML

    大型XML文件或内存有限时,SAX和PULL解析更为合适,其中PULL解析因为其API的简洁性,通常更受Android开发者青睐。 了解了这三种解析方式的基本原理后,可以通过实际编程实践来掌握它们的使用。例如,可以创建一个...

Global site tag (gtag.js) - Google Analytics