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

android Pull解析复杂XML

阅读更多

要解析的网络文件:http://www.jinghua.cn/iphone/xml/bj.xml

 

解析代码

/**
	 * 从网络地址URL读取XML文件用Pull解析XML---解析jinghua2.xml
	 * @param xmlUrlPath xml的网络地址
	 * @return 阿福
	 * @throws Exception
	 */
	public static List<News> URLReadXmlByPull(String xmlUrlPath) throws Exception{
		List<News> listNews =  new ArrayList<News>();;
		News news = null;
		URL url = new URL(xmlUrlPath);
		//构建XmlPullParserFactory
		XmlPullParserFactory pullParserFactory = XmlPullParserFactory.newInstance();
		//获取XmlPullParser的实例
		XmlPullParser xmlPullParser = pullParserFactory.newPullParser();
		Log.i("PullParseXML", "getXML......");
		//设置输入流  xml文件装载器
		xmlPullParser.setInput(url.openConnection().getInputStream(), "UTF-8");
		//开始
		Log.i("PullParseXML", "PullParseXML....start....");
		/**
		 * pull读到xml后 返回数字
		 *   读取到xml的声明返回数字0 START_DOCUMENT;
			   读取到xml的结束返回数字1 END_DOCUMENT ;
			   读取到xml的开始标签返回数字2 START_TAG
			   读取到xml的结束标签返回数字3 END_TAG
			   读取到xml的文本返回数字4 TEXT
		 */
		int eventType=xmlPullParser.getEventType();
		/**
		 * 只要这个事件返回的不是1 我们就一直读取xml文件
		 */
		while(eventType != XmlPullParser.END_DOCUMENT){
			String nodeName=xmlPullParser.getName();
			switch (eventType) {
			case XmlPullParser.START_DOCUMENT:
				break;
			case XmlPullParser.START_TAG:
				if("item".equals(nodeName)){
					news = new News();
				} 
				if("title".equals(nodeName) && news != null){
					news.setTitle(xmlPullParser.nextText());
				} 
				if("link".equals(nodeName)  && news != null){
					news.setLink(xmlPullParser.nextText());
				}
				if("author".equals(nodeName)  && news != null){
					news.setAuthor(xmlPullParser.nextText());
				}
				if("guid".equals(nodeName)  && news != null){
					news.setGuid(xmlPullParser.nextText());
				}
				if("image".equals(nodeName)  && news != null){
					news.setImage(xmlPullParser.nextText());
				}
				if("video".equals(nodeName)  && news != null){
					news.setVideo(xmlPullParser.nextText());
				}
				if("category".equals(nodeName)  && news != null){
					news.setCategory(xmlPullParser.nextText());
				}
				if("pubDate".equals(nodeName)  && news != null){
					news.setPubDate(xmlPullParser.nextText());
				}
				if("comments".equals(nodeName)  && news != null){
					news.setComments(xmlPullParser.nextText());
				}
				if("description".equals(nodeName)  && news != null){
					news.setDescription(xmlPullParser.nextText());
				}
				
				break;
			case XmlPullParser.END_TAG:
				if("item".equals(nodeName)){
					listNews.add(news);
				}
				break;

			default:
				break;
			}
			eventType = xmlPullParser.next();
		}
		return listNews;
	}
	

 使用时

//从网络读取XML文件用Pull解析XML---解析jinghua2.xml(http://www.jinghua.cn/iphone/xml/bj.xml)
	public void testPullRead3() throws Throwable{
		List<News> persons = ReadXmlByPullService.URLReadXmlByPull("http://www.jinghua.cn/iphone/xml/bj.xml");
		for(News person : persons){
			Log.i(TAG, person.toString());
		}
	}

 实体

package com.yangguangfu.xml.domain;

/**
 * 新闻
 * 
 * @author 阿福
 * 
 */
public class News {
	private String title;
	private String link;
	private String author;
	private String guid;
	private String image;
	private String video;
	private String category;
	private String pubDate;
	private String comments;
	private String description;

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public String getLink() {
		return link;
	}

	public void setLink(String link) {
		this.link = link;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public String getGuid() {
		return guid;
	}

	public void setGuid(String guid) {
		this.guid = guid;
	}

	public String getImage() {
		return image;
	}

	public void setImage(String image) {
		this.image = image;
	}

	public String getVideo() {
		return video;
	}

	public void setVideo(String video) {
		this.video = video;
	}

	public String getCategory() {
		return category;
	}

	public void setCategory(String category) {
		this.category = category;
	}

	public String getPubDate() {
		return pubDate;
	}

	public void setPubDate(String pubDate) {
		this.pubDate = pubDate;
	}

	public String getComments() {
		return comments;
	}

	public void setComments(String comments) {
		this.comments = comments;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	@Override
	public String toString() {
		return "title=" + title + "guid=" + guid + ",link=" + link
				+ ",description=" + description + ",image=" + image + ",video="
				+ video + ",category=" + category + ",author=" + author
				+ ",pubDate=" + pubDate + ",comments=" + comments;
	}

}
分享到:
评论
3 楼 line1213 2015-07-15  
你只解析item节点中的内容啊,上面的内容如何解析,在START_TAG如何写
2 楼 kjsoloho 2012-04-13  
kjsoloho 写道
为什么我的xmlpullparser解析不了网络获取的inputstream?
但是可以解析本地的inputstream,而且如果把网络的stream转换成string也可以解析,请问为什么?

问题已经解决,是因为我提早关闭了inputstream...
1 楼 kjsoloho 2012-04-13  
为什么我的xmlpullparser解析不了网络获取的inputstream?
但是可以解析本地的inputstream,而且如果把网络的stream转换成string也可以解析,请问为什么?

相关推荐

Global site tag (gtag.js) - Google Analytics