`
lijunjie
  • 浏览: 392335 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android下对xml的解析

阅读更多
android 解析xml
1.使用SAXParser
    	try
    	{
    		
    	   URL url = new URL(urlToRssFeed);

           // create the factory
           SAXParserFactory factory = SAXParserFactory.newInstance();
           // create a parser
           SAXParser parser = factory.newSAXParser();

           // create the reader (scanner)
           XMLReader xmlreader = parser.getXMLReader();
           // instantiate our handler
           RSSHandler theRssHandler = new RSSHandler();
           // assign our handler
           xmlreader.setContentHandler(theRssHandler);
           // get our data via the url class
           InputSource is = new InputSource(url.openStream());
           // perform the synchronous parse           
           xmlreader.parse(is);
           // get the results - should be a fully populated RSSFeed instance, or null on error
           return theRssHandler.getFeed();
    	}
    	catch (Exception ee)
    	{
    		// if we have a problem, simply return null
    		return null;
    	}


handle片段
实现startDocument,endDocument,startElement,endElement四个方法
开始文档初始化数组,开始元素时初始化元素,完成元素时,把内容添加元素对象中,再把元素对象添加到对象数组中
最后返回对象数组


	RSSFeed getFeed()
	{
		return _feed;
	}
	

	public void startDocument() throws SAXException
	{
		// initialize our RSSFeed object - this will hold our parsed contents
		_feed = new RSSFeed();
		// initialize the RSSItem object - we will use this as a crutch to grab the info from the channel
		// because the channel and items have very similar entries..
		_item = new RSSItem();

	}
	public void endDocument() throws SAXException
	{
	}
	public void startElement(String namespaceURI, String localName,String qName, Attributes atts) throws SAXException
	{
		depth++;
		if (localName.equals("channel"))
		{
			currentstate = 0;
			return;
		}
		if (localName.equals("image"))
		{
			// record our feed data - we temporarily stored it in the item :)
			_feed.setTitle(_item.getTitle());
			_feed.setPubDate(_item.getPubDate());
		}
		if (localName.equals("item"))
		{
			// create a new item
			_item = new RSSItem();
			return;
		}
		if (localName.equals("title"))
		{
			currentstate = RSS_TITLE;
			return;
		}
		if (localName.equals("description"))
		{
			currentstate = RSS_DESCRIPTION;
			return;
		}
		if (localName.equals("link"))
		{
			currentstate = RSS_LINK;
			return;
		}
		if (localName.equals("category"))
		{
			currentstate = RSS_CATEGORY;
			return;
		}
		if (localName.equals("pubDate"))
		{
			currentstate = RSS_PUBDATE;
			return;
		}
		// if we don't explicitly handle the element, make sure we don't wind up erroneously 
		// storing a newline or other bogus data into one of our existing elements
		currentstate = 0;
	}
	
	public void endElement(String namespaceURI, String localName, String qName) throws SAXException
	{
		depth--;
		if (localName.equals("item"))
		{
			// add our item to the list!
			_feed.addItem(_item);
			return;
		}
	}
	



2.使用XmlPullParser来解析rss

       // TODO: switch to sax

        XmlPullParser xpp = Xml.newPullParser();
        xpp.setInput(in, null);  // null = default to UTF-8

        int eventType;
        String title = "";
        String link = "";
        String description = "";
        eventType = xpp.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_TAG) {
                String tag = xpp.getName();
                if (tag.equals("item")) {
                    title = link = description = "";
                } else if (tag.equals("title")) {
                    xpp.next(); // Skip to next element -- assume text is directly inside the tag
                    title = xpp.getText();
                } else if (tag.equals("link")) {
                    xpp.next();
                    link = xpp.getText();
                } else if (tag.equals("description")) {
                    xpp.next();
                    description = xpp.getText();
                }
            } else if (eventType == XmlPullParser.END_TAG) {
                // We have a comlete item -- post it back to the UI
                // using the mHandler (necessary because we are not
                // running on the UI thread).
                String tag = xpp.getName();
                if (tag.equals("item")) {
                    RssItem item = new RssItem(title, link, description);
                    mHandler.post(new ItemAdder(item));
                }
            }
            eventType = xpp.next();
        }

分享到:
评论

相关推荐

    android下解析xml文件的demo

    本教程将详细介绍如何在Android环境下解析XML文件,以"ReadXMLDemo"为例,展示具体步骤和关键知识点。 首先,XML(eXtensible Markup Language)是一种自定义标记语言,它的结构清晰,易于读写,适合于数据交换和...

    android xml pull解析示例

    XML Pull解析器是基于事件驱动的解析方式,它会触发一系列事件(如开始标签、结束标签、文本数据等),开发者可以注册监听这些事件,从而实现对XML文档的解析。这种方式既节省内存又提高效率,特别适合处理大型XML...

    六,Android Xml解析

    XML解析是将XML文档转换为Java对象的过程,这对于Android应用程序的资源配置、布局定义以及数据交换至关重要。这篇博文将深入探讨Android中的XML解析机制,包括DOM、SAX和Pull解析器三种主要方法。 首先,我们来看...

    Android Dom解析XML

    本文将深入探讨如何使用DOM(Document Object Model)解析XML在Android应用中的实践。DOM解析方式允许开发者一次性加载整个XML文档到内存中,形成一个树形结构,便于遍历和操作。尽管对于大型XML文件,DOM解析可能因...

    android xml多种解析生成

    Android XML 多种解析生成 Android 平台中,XML 文件解析和生成是非常重要的一部分。XML 文件可以存储和交换结构化数据,广泛应用于 Android 应用程序中。本文将介绍 Android 中使用多种解析和生成 XML 文件的方法...

    使用Android自带的XML解析器PULL解析器简单的解析xml

    Android系统提供了一种轻量级的XML解析方式——PULL解析器(Pull Parser),它适用于处理大型XML文档,因为它不需要像DOM解析器那样一次性加载整个XML文档到内存中。PULL解析器通过事件驱动的方式,按需解析XML文档...

    android下XML解析源码

    Android提供了两种主要的XML解析方式:DOM(Document Object Model)和Pull解析器。下面我们将详细探讨这两种解析方法及其在Android下的实现原理。 **DOM解析** DOM解析器将整个XML文档加载到内存中,形成一个树形...

    Android中XML数据解析

    再者,Pull解析器是Android特有的,它提供了一种轻量级的解析方式,通过迭代调用`XmlPullParser`的下一个事件来解析XML。这种方式对内存的要求更低,适合移动设备。以下是一个基本的Pull解析示例: ```java ...

    android java xml 解析生成jar

    本主题将详细讲解如何在Android环境中利用Java进行XML解析,并生成JDOM库的jar文件。 XML解析在Android中的重要性不言而喻,因为XML常被用来描述应用程序的配置、布局,甚至是网络通信的数据交换格式。Java提供了...

    在android中使用pull解析xml文件

    本文将深入探讨如何在Android中使用Pull解析器解析XML文件。 一、XML Pull解析器简介 XML Pull解析器(XML Pull API)是一种基于事件驱动的解析模型,它不需预先加载整个XML文档,而是逐行读取,当遇到特定的XML...

    android 三种xml解析方式整合

    对于XML的处理,Android提供了三种主要的解析方式:DOM(Document Object Model)、SAX(Simple API for XML)和PULL(Pull Parser)。下面将详细介绍这三种解析方式及其特点。 1. DOM解析: DOM解析器会将整个XML...

    Android XML 解析笔记

    Android支持多种XML解析技术,包括DOM、SAX和Pull解析。每种方法都有其特定的优势和应用场景。 #### DOM解析XML DOM(Document Object Model)解析是一种将整个XML文档加载到内存中,并构建出一棵树状结构(称为DOM...

    Android解析XML文件

    本例使用多种方式获取本地XML文件,还有通过url获取XML文件,使用Android内置的PULL解析器对XML文件进行解析,例子是解析我国各个省市。 《Android解析XML文件》博文路径:...

    Android网络下的XML解析和生成

    在Android中,有两种主要的XML解析方式:DOM(文档对象模型)和SAX(简单API for XML)。 1. DOM解析: DOM解析器会加载整个XML文档到内存中,形成一棵树形结构,每个节点代表XML文档的一部分。这种方式便于遍历和...

    android XML三种解析及生成

    本文将深入探讨Android中的三种XML解析方式:SAX(Simple API for XML)、Pull Parser和DOM(Document Object Model),以及如何生成XML文件。 ### 1. SAX解析 SAX解析器是基于事件驱动的解析模型,它逐行读取XML...

    android XML本地解析实例

    二、Android中的XML解析实例 1. DOM解析实例: ```java DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = ...

    Android 实现动态XML解析

    本文将深入探讨如何在Android环境中实现动态XML解析,尤其是在遇到不定结构的XML数据时的处理方法。 首先,我们需要了解XML解析的基本原理。XML解析分为两种主要类型:DOM(Document Object Model)解析和SAX...

    Android XML 解析 写入

    本篇将详细探讨Android中的XML解析,特别是PULL解析方式,并讲解如何进行XML的写入操作。 ### 1. Android XML解析概述 XML解析器分为两种主要类型:DOM(Document Object Model)和PULL(Pull Parser)。DOM解析器...

    android中使用PULL解析XML

    在Android中,有两种主要的XML解析方式:DOM解析和SAX解析。DOM解析会将整个XML文档加载到内存中形成一棵DOM树,方便后续查询但消耗较多资源;而SAX解析是事件驱动的,逐行读取,不会加载整个文档,节省内存但操作...

    android 之xml解析大全

    本篇文章将详细探讨Android中四种主要的XML解析方法:SAXParser、Document、XMLResource和VTDGen。 1. SAXParser(Simple API for XML) SAXParser是基于事件驱动的解析器,适用于处理大型XML文档。它不会一次性...

Global site tag (gtag.js) - Google Analytics