`
gryphone
  • 浏览: 433734 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

XML解析-DOM

阅读更多

关于XML解析 以前有说过 不过那是SAX方式的 今天说一下DOM方法

 

 

[序言]

1. 今天解析的目标是:香港天气rss 地址为:

http://202.140.96.134:8080/FS-RSS/ftpfile/local_weather.xml

 

现在的目标就是:定制化该目标的解析办法 我们还是查看一下该地址的源文件 具体方法:

 

 

现在贴其源文件://注:为了阅读方便 我加了一些“回车换行”源文件是没有这些的

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel><title>HK Weather Today</title>
              <description>HK Weather Today</description>
              <item><title>HK Weather Today</title>
                  <pubDate>Wed, 24 Mar 2010 07:00:00 GMT</pubDate>
                  <description><![CDATA[Current Temperature = 22<br>Humidity = 96<br>UV Index = null<br>UV Intensity = null<br>Icon = SI<br><img src="img/SI.png" border="0"/> <br>]]>                </description>
         </item>
    </channel></rss>

 

 

 

下面叙述具体怎么解析:

 

1. 定义界面 内有若干TextView 供显示结果用

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
	android:id="@+id/city"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<TextView  
	android:id="@+id/time"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<TextView  
	android:id="@+id/temp"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<TextView  
	android:id="@+id/humidity"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<TextView  
	android:id="@+id/uvIndex"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<TextView  
	android:id="@+id/uvIntensity"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
<ImageView  
	android:id="@+id/image"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    />
</LinearLayout>

 

 

2. 得到各个View 的实例

public void initialView(){
    	city = (TextView)findViewById(R.id.city);
    	time = (TextView)findViewById(R.id.time);
    	temp = (TextView)findViewById(R.id.temp);
    	hunidity = (TextView)findViewById(R.id.humidity);
    	uvIndex = (TextView)findViewById(R.id.uvIndex);
    	uvIntensity = (TextView)findViewById(R.id.uvIntensity);
    	image = (ImageView)findViewById(R.id.image);
    }

 

 

3. 定义目标InputStream

URL url = new URL(s);

URLConnection connection = url.openConnection();
		    
HttpURLConnection httpConnection = (HttpURLConnection)connection;

InputStream in = httpConnection.getInputStream(); 
int responseCode = httpConnection.getResponseCode();
		    

 

 

4. 定于DocumentBuilder实例 并解析目标

DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();

DocumentBuilder db = dbfactory.newDocumentBuilder();

//解析目标
Document dom = db.parse(in);

 

 

5. 得到DocumentBuilder的所有Element

Element docEle = dom.getDocumentElement();

 

 

6. 得到docEle 的"channel"分支

NodeList nl = docEle.getElementsByTagName("channel");

 

 

7. 解析 并得到自己关系的列

if (nl != null && nl.getLength() > 0) {
			        for (int i = 0 ; i < nl.getLength(); i++) {
			        	
			        	//得到某行数据
			        	Element entry = (Element)nl.item(i);
			          
			        	Element info = (Element)entry.getElementsByTagName("item").item(0);
			        	
			        	//从该行中取出目标  方法:键值 Key-Value
			        	Element eTitle = (Element)info.getElementsByTagName("title").item(0);
			        	Element eDay = (Element)info.getElementsByTagName("pubDate").item(0);
			        	Element eDescription = (Element)info.getElementsByTagName("description").item(0);
			        	
			        	//取出其内容
			        	String scity = eTitle.getFirstChild().getNodeValue();
			        	String stime = eDay.getFirstChild().getNodeValue();
			        	String sdescription = eDescription.getFirstChild().getNodeValue();
			        	
			        	//遍历目标 以指定字符分割 然后按顺序放入String[]
			        	String[] string = sdescription.split("<br>");
			        	
			        	String temporary = string[0];
			        	String tenp = temporary.split("=")[1];
			        	
			        	String humidity = string[1];
			        	String hum = humidity.split("=")[1];
			        	
			        	String uIndex = string[2];
			        	String uv_Index = uIndex.split("=")[1];
			        	
			        	String uIntensity = string[3];
			        	String uv_Intensity = uIntensity.split("=")[1];
			        	
			        	
			        	//String uIntensity = string[3];
			        	String icoName = string[5];
			        	
			        	String address = icoName.split(" ")[1];
			        	
			        	String address1 = address.split("=")[1];
			        	
			        	//去除两边的"\""
			        	String address2 = address1.replaceAll("\"", "");
			        	
			        	
			        	city.setText("地区:"+scity);
			        	time.setText("时间:"+stime);
			        	temp.setText("温度:"+tenp);
			        	hunidity.setText("湿度:"+hum);
			        	uvIndex.setText("紫外线指数:"+uv_Index);
			        	uvIntensity.setText("紫外线强度:"+uv_Intensity);
			        	image.setImageBitmap(queryImageByURI(ico_preface+address2));
			        }
			      }

 

8. 实话说 具体怎么一步步解析的很难说 大家自己看代码 应该能理解 具体做法:类似于:剥花生 即:一层层剥 直至露出里面的东西

 

 

9. 对了 还有 即:根据图片名字 下载之 然后显示之

public final static String ico_preface = "http://202.140.96.134:8080/FS-RSS/";

public Bitmap queryImageByURI(String iu){
    	try{
    		
			URL imgURL = new URL(iu);
			URLConnection conn = imgURL.openConnection();
			
			conn.connect();
			InputStream is = conn.getInputStream();
			
			BufferedInputStream bis = new BufferedInputStream(is);
			
			Bitmap bm = BitmapFactory.decodeStream(bis);
			
			bis.close();
			is.close();
			return bm;
		}catch(Exception e){
          return null;
		} 
    }

  

10. emulator 运行截图 哦 对了 别忘了打开网络权限 即:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>

 

分享到:
评论

相关推荐

    XML解析-dom4j.jar-jdom.jar

    总结来说,XML解析在Java开发中扮演着重要角色,dom4j和jdom是两个常用的XML处理库,它们各有特点,提供了丰富的功能来帮助开发者处理XML文档。理解这两个库的差异和优势,以及如何在项目中正确使用它们,对于提升...

    XML解析工具- TinyXML2 -源代码 - C++

    作为XML解析器,TinyXML-2具有以下特点: 1. 轻量级且易于集成:它体积小巧,代码简洁,易于集成到各种 C++ 项目中。 2. API简单易用:它提供了简单易用的 API,使得解析和操作 XML 数据变得简单快捷。开发者可以...

    xml--DOM技术

    在实际应用中,DOM技术常用于动态网页和Web应用程序,例如AJAX(Asynchronous JavaScript and XML)中,XML数据被请求并解析成DOM树,然后用JavaScript更新页面内容。此外,XMLHttpRequest对象也经常与DOM结合,用于...

    XML ----DOM操作

    1. **加载XML文档**:首先,我们需要创建一个DOM解析器,如Java中的`DocumentBuilderFactory`和`DocumentBuilder`,它们用于读取XML文件并构建DOM树。 2. **获取根节点**:解析后的XML文档会被转换为一个`Document`...

    xml-DOM教学PPT

    在解析XML文档时,DOM一次性加载整个文档到内存中,构建出一个树形结构,方便开发者通过API直接查找、添加、删除和修改节点。相比于SAX解析器,DOM在解析时消耗更多资源,但提供了更直观和方便的编程模型。 DOM的...

    XML四种解析方式------DOM SAX JDOM DOM4J

    JDOM是Java特有的XML解析库,它提供了更符合Java习惯的API来操作XML。与DOM类似,JDOM也创建一个文档对象模型,但它的设计更简洁,易于使用。相比DOM,JDOM的性能稍好,因为它减少了对象创建和内存使用,但对大型XML...

    XmlDom - 全能最强XML模块

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在软件开发、网页制作以及数据交换等领域。...在实际项目中,根据需求选择合适的方法,如解析、创建、修改XML文档,可以极大地提高工作效率。

    axiom-dom-1.2.11.jar.zip

    在实际应用中,"axiom-dom-1.2.11.jar"可以作为依赖包被其他Java项目引入,用于XML的解析、转换和生成。例如,它可以用于XML Schema验证,或者与Web服务(如SOAP)进行交互,因为这些场景经常涉及到XML数据的处理。 ...

    xml-dom4j解析工具类

    这个“xml-dom4j解析工具类”显然是为了简化XML文档操作而设计的,它利用DOM4J库来处理XML数据。 首先,让我们详细了解一下DOM4J的核心概念。DOM4J提供了一个灵活的API,以树形结构表示XML文档。在DOM(Document ...

    axiom-dom-1.2.2.jar.zip

    综上所述,"axiom-dom-1.2.2.jar.zip"是一个包含Axiom-DOM库的1.2.2版本的Java归档文件,用于处理XML文档,特别是SOAP消息。它需要与其他依赖包一起使用,并受特定的开源许可协议约束。开发者在使用时,应确保正确...

    XML-DOM-Java

    在这个“XML-DOM-Java-Spec.rar”压缩包中,我们很可能是找到了一个关于如何在Java中使用DOM处理XML的演示文稿,名为“XML-DOM-Java-Spec.ppt”。 以下是关于XML DOM和Java处理XML的一些关键知识点: 1. **DOM解析...

    Android解析xml(2)---DOM解析

    DOM解析器是XML解析的一种方法,它将整个XML文档加载到内存中的一个对象模型,这个模型称为DOM树。开发者可以遍历这个树来访问或修改XML文件的任何部分。因为DOM解析器将整个文件加载到内存,所以对于大型XML文件,...

    axiom-dom-1.2.12.jar.zip

    《深入解析axiom-dom-1.2.12.jar.zip:Java XML处理的关键库》 在Java开发领域,处理XML文档是一项常见的任务。为了高效、便捷地操作XML,开发者们通常会依赖一些强大的库,而axiom-dom-1.2.12.jar正是其中之一。这...

    xml解析器-----dom4j.jar

    DOM4j类包,已经打包,放在工程项目的BIN下

    axiom-dom-1.2.9.jar.zip

    DOM是XML解析的主流标准之一,它将XML文档表示为一个树形结构,每个节点代表XML文档的一个部分,如元素、属性、文本等。Axiom DOM不仅支持基本的DOM操作,还提供了高级特性,如延迟加载和流式处理,以减少内存占用和...

    xml解析器-dom4j的支持包_ 教程

    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。...

    DOMParser解析xml

    DOMParser接口提供了解析XML字符串并创建DOM文档的方法,以便于开发者可以使用DOM API来查询、修改或操作XML数据。 以下是对"DOMParser解析XML"这一主题的详细说明: 1. **DOMParser的基本使用**: 使用DOMParser...

    XML解析技术DOM4J解析

    ### XML解析技术DOM4J解析 #### DOM4J解析概览 DOM4J是一种高性能、功能强大且极其易于使用的Java XML API,它最初是作为JDOM的一个智能分支发展起来的,自2000年下半年开始持续开发。DOM4J不仅在功能上超越了基本...

    Java操作XML文件-dom4j .doc

    需要注意的是,DOM4J使用DOM模型处理XML,因此对于大型XML文件,可能会占用大量内存,这时可以考虑使用SAX或StAX等基于事件的解析器来优化性能。 总之,DOM4J是Java处理XML的一个强大工具,它简化了XML文档的读取、...

    XML解析之DOM

    在"XML解析之DOM"这一主题中,我们将深入探讨DOM解析器如何工作,以及如何通过DOM API获取XML文件中的信息。DOM解析器将整个XML文档加载到内存中,形成一个节点树,每个元素、属性、文本等内容都对应一个节点。这种...

Global site tag (gtag.js) - Google Analytics