- 浏览: 433732 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
yehuiyan8002:
支持中文查询
快熟查找联系人 -
lehehe:
现成的接口,免费试用,http://www.haoservic ...
天气Widget -
D.Z:
android:focusable="false&q ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
freecode:
碰到该问题,CheckBox的android:focusabl ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
echohfut:
哥们,新博客是不是在墙外啊?不能访问。还有你怎么进行博客迁移的 ...
博客 迁移
关于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>
发表评论
-
滑动抽屉 另一种解决办法
2010-07-09 17:43 0滑动抽屉 -
Spinner 定制化 增强版
2010-07-09 14:34 2609Spinner 作为下拉选 ... -
ListView 内容之分批显示
2010-06-25 20:38 5925ListView 内容循环显示 大家试想 假如 ... -
MediaScanner 研究
2010-06-23 15:21 3170MediaScanner 之所以拿MediaSc ... -
CheckBox在ListView 而导致其OnItemClickListener不会被触发
2010-06-22 20:55 19015CheckBox在ListView 而导致其OnItemCli ... -
获取Launcher 启动列表
2010-06-22 10:09 3138获取Launcher 启动列表 即 列出所有Launc ... -
PreferenceActivity 全接触
2010-06-19 12:53 9440PreferenceActivity 为了引入 ... -
android src 下载 编译 安装 全接触
2010-06-12 14:44 0android src - download install ... -
Intent.createChooser() 妙用
2010-06-12 11:14 5955Intent.createChooser(ntent targ ... -
SMS管理:收信箱 发信息 编写新信息
2010-06-07 08:14 14445SMS管理 [功能] 1. 收信箱:显示 ... -
求 android 手机 帮忙测试sms服务系统 谢谢
2010-06-05 08:25 1452Hi guys, 最近一段时间没有更新blog 因为一 ... -
流媒体 播放 理论篇
2010-05-28 14:42 2224流媒体播放 之所以为理论篇 因为该篇仅实现了播放功能 ... -
NDK 搭建与HelloWorld
2010-05-19 09:48 3226NDK [前提] 1. Cygwin 用于安装 ... -
自定义字体
2010-05-15 10:49 1221自定义字体: []代码 步骤] 1 ... -
模糊查找 再深入
2010-05-15 09:41 3158模糊查找 再深入 应某位大哥要求 再次对 SQLite ... -
快捷方式Bar + ViewGroup - 自定义
2010-05-09 09:20 2471TabActivity - 自定义 其实 这篇感觉极鸡 ... -
View 拖动&插入 研究
2010-05-09 07:14 3985View 拖动&插入 即: ... -
带图标 快捷键 Menu - 终极版
2010-05-04 20:23 1837Menu 改头换面 扩展如下: 1. 图标化文字 2 ... -
*.gif 解码 - 实践
2010-05-02 18:58 1737*.gif decode 前面已经说过 今天不打算再说了 ... -
*.gif 解码 - 理论
2010-05-01 21:11 1522我们知道Android 默认是不支持*.gif 的 但是 ...
相关推荐
总结来说,XML解析在Java开发中扮演着重要角色,dom4j和jdom是两个常用的XML处理库,它们各有特点,提供了丰富的功能来帮助开发者处理XML文档。理解这两个库的差异和优势,以及如何在项目中正确使用它们,对于提升...
作为XML解析器,TinyXML-2具有以下特点: 1. 轻量级且易于集成:它体积小巧,代码简洁,易于集成到各种 C++ 项目中。 2. API简单易用:它提供了简单易用的 API,使得解析和操作 XML 数据变得简单快捷。开发者可以...
在实际应用中,DOM技术常用于动态网页和Web应用程序,例如AJAX(Asynchronous JavaScript and XML)中,XML数据被请求并解析成DOM树,然后用JavaScript更新页面内容。此外,XMLHttpRequest对象也经常与DOM结合,用于...
1. **加载XML文档**:首先,我们需要创建一个DOM解析器,如Java中的`DocumentBuilderFactory`和`DocumentBuilder`,它们用于读取XML文件并构建DOM树。 2. **获取根节点**:解析后的XML文档会被转换为一个`Document`...
在解析XML文档时,DOM一次性加载整个文档到内存中,构建出一个树形结构,方便开发者通过API直接查找、添加、删除和修改节点。相比于SAX解析器,DOM在解析时消耗更多资源,但提供了更直观和方便的编程模型。 DOM的...
JDOM是Java特有的XML解析库,它提供了更符合Java习惯的API来操作XML。与DOM类似,JDOM也创建一个文档对象模型,但它的设计更简洁,易于使用。相比DOM,JDOM的性能稍好,因为它减少了对象创建和内存使用,但对大型XML...
XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用在软件开发、网页制作以及数据交换等领域。...在实际项目中,根据需求选择合适的方法,如解析、创建、修改XML文档,可以极大地提高工作效率。
在实际应用中,"axiom-dom-1.2.11.jar"可以作为依赖包被其他Java项目引入,用于XML的解析、转换和生成。例如,它可以用于XML Schema验证,或者与Web服务(如SOAP)进行交互,因为这些场景经常涉及到XML数据的处理。 ...
这个“xml-dom4j解析工具类”显然是为了简化XML文档操作而设计的,它利用DOM4J库来处理XML数据。 首先,让我们详细了解一下DOM4J的核心概念。DOM4J提供了一个灵活的API,以树形结构表示XML文档。在DOM(Document ...
综上所述,"axiom-dom-1.2.2.jar.zip"是一个包含Axiom-DOM库的1.2.2版本的Java归档文件,用于处理XML文档,特别是SOAP消息。它需要与其他依赖包一起使用,并受特定的开源许可协议约束。开发者在使用时,应确保正确...
在这个“XML-DOM-Java-Spec.rar”压缩包中,我们很可能是找到了一个关于如何在Java中使用DOM处理XML的演示文稿,名为“XML-DOM-Java-Spec.ppt”。 以下是关于XML DOM和Java处理XML的一些关键知识点: 1. **DOM解析...
DOM解析器是XML解析的一种方法,它将整个XML文档加载到内存中的一个对象模型,这个模型称为DOM树。开发者可以遍历这个树来访问或修改XML文件的任何部分。因为DOM解析器将整个文件加载到内存,所以对于大型XML文件,...
《深入解析axiom-dom-1.2.12.jar.zip:Java XML处理的关键库》 在Java开发领域,处理XML文档是一项常见的任务。为了高效、便捷地操作XML,开发者们通常会依赖一些强大的库,而axiom-dom-1.2.12.jar正是其中之一。这...
DOM4j类包,已经打包,放在工程项目的BIN下
DOM是XML解析的主流标准之一,它将XML文档表示为一个树形结构,每个节点代表XML文档的一个部分,如元素、属性、文本等。Axiom DOM不仅支持基本的DOM操作,还提供了高级特性,如延迟加载和流式处理,以减少内存占用和...
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。...
DOMParser接口提供了解析XML字符串并创建DOM文档的方法,以便于开发者可以使用DOM API来查询、修改或操作XML数据。 以下是对"DOMParser解析XML"这一主题的详细说明: 1. **DOMParser的基本使用**: 使用DOMParser...
### XML解析技术DOM4J解析 #### DOM4J解析概览 DOM4J是一种高性能、功能强大且极其易于使用的Java XML API,它最初是作为JDOM的一个智能分支发展起来的,自2000年下半年开始持续开发。DOM4J不仅在功能上超越了基本...
需要注意的是,DOM4J使用DOM模型处理XML,因此对于大型XML文件,可能会占用大量内存,这时可以考虑使用SAX或StAX等基于事件的解析器来优化性能。 总之,DOM4J是Java处理XML的一个强大工具,它简化了XML文档的读取、...
在"XML解析之DOM"这一主题中,我们将深入探讨DOM解析器如何工作,以及如何通过DOM API获取XML文件中的信息。DOM解析器将整个XML文档加载到内存中,形成一个节点树,每个元素、属性、文本等内容都对应一个节点。这种...