热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android应用中使用HTMLParser便捷的解析html内容

概述随着移动互联网的发展,更多的内容需要从传统互联网延伸到移动终端呈现。一般的做法有三种:1.WebAPP:利用HTML5技术,例如JQuerymobile、DojoXmobile,在服

概述

随着移动互联网的发展,更多的内容需要从传统互联网延伸到移动终端呈现。一般的做法有三种:1. Web APP:利用 HTML5 技术,例如 JQuery mobile、DojoX mobile,在服务器端对网页进行移动优化。2. Hybrid APP:利用 HTML5 技术,以及 phonegap 等框架生成 APP,可以通过 phonegap 直接调用手机操作系统的 API,比如传感器,响铃等。3. 原生态 APP:将要显示的内容下载到本地,解析后重新布局并显示。

三种移动应用的优劣已经有很多文章进行比较,这里不再赘述。Web APP,Hybrid APP 其最大的优点在于跨平台,对于控制开发者成本来说是不二选择,但其缺点也比较明显,其在移动终端的用户体验不如原生态 APP。笔者认为,对于企业级用户,其对于用户体验要求不是很高,只是使用移动终端完成相应业务流程,那么使用 Web APP 或者 Hybrid APP 可以降低其开发成本,但对于个人用户,用户体验会比较挑剔,那么采用原生态 APP 才能在众多的应用中具有竞争力。

本文将着重讨论在原生态 APP 中,为了更好地显示网页内容,通过使用 HTML Parser 将网页内容进行提取,解析,并在 Android 应用中重新布局,最后以一个实例来讲解 HTML Parser 在 Android 中的使用。

HTML Parser 在 Android 中的使用

HTM Parser 是一个用来解析 HTML 文档的开放源码项目,提供了强大的 API 实现对 Html 网页进行信息转换 (Transformation) 以及从 HTML 文档里提取 (Extraction) 感兴趣的信息。它具有小巧、快速、使用简单的特点,并且经过严格的测试。

在 JavaEE 的应用中,可以直接从 HTML Parser 主页下载 htmlparser.jar,并将其导入 Build Path,即可以使用 htmlparser.jar 里定义的 API。但是这种方式在 Android 工程中并不适合,因为 Android 采用的是 Dalvik 虚拟机,而 htmlparser.jar 的编译是在传统 Oracle Java 虚拟机上完成编译的,所以将 htmlparser.jar 导入 Android 工程后并不能直接使用。

下面通过实例了解如何在 Android 工程中使用 HTML Parser,即创建 HTML Parser 的 Library 工程,并且将其导入到需要引用的 Android 应用中:

  1. 从 http://sourceforge.net/projects/htmlparser网站上下载 HTML Parser 的源代码;
  2. 创建一个 Android 工程,命名为 myHtmlParser。将 HTML Parser 的源代码导入该工程中,并移除源代码中的示例代码和单元测试代码;
  3. 将 myHtmlParser 工程设置为 Library 工程。方法为:右键工程 ->Properties->Android,勾选 Is Libaray 选项;
  4. 编译 myHtmlParser 工程;
  5. 在需要使用 HTML Parser 的项目中将 myHtmlParser 工程导入。即可使用 HTML Parser 提供的 API。

图 1. 创建 myHtmlParser 工程
图 1. 创建 myHtmlParser 工程  

图 2. 导入 HTML Parser 的源代码
图 2. 导入 HTML Parser 的源代码  

图 3. 设置 myHtmlParser 工程为 Library 工程
图 3. 设置 myHtmlParser 工程为 Library 工程  

HTML Parser 在 Android 中的应用实例

本文将以解析 DeveloperWorks 主页的最新推荐文章为例子,来详细阐述如何在 Android 项目中使用 HTML Parser。在这个例子中,创建一个 Android 应用,导入 HTML Parser Library 工程,通过 HTML Parser 获取 DeveloperWorks 主页信息,并且将 DeveloperWorks 主页上最新推荐的文章名称解析出来,将推荐文章列表显示在一个 ListView 中。(附源代码)


图 4. DeveloperWorks 主页上最新推荐文章列表
图 4. DeveloperWorks 主页上最新推荐文章列表  

实现步骤如下:

1. 创建示例工程,命名为 dwParser,将 myHtmlParser 作为 Library 导入到该工程中。右键工程 ->Properties->Android,添加 myHtmlParser 作为引用工程。


图 5. 将 myHtmlParser 导入 dwParser 工程
图 5. 将 myHtmlParser 导入 dwParser 工程  

2. 打开工程中的 manifest 文件,添加声明网络访问的权限。方式为添加 uses-permission 节点,并设置android:name 的属性值为 android.permission.INTERNET


清单 1. manifest 文件里添加声明网络访问的权限
        
package="com.example.androidtest"
android:versiOnCode="1"
android:versiOnName="1.0">



android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme">





3. 添加 ListView 控件到布局文件中,用来存放解析出来的 Developerworks 主页上最新推荐的文章列表。修改 MyMainActivity 类型的文件,使其继承于 ListActivity。


清单 2. 添加 ListView 控件到布局文件中
        
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_ >

android:layout_
android:layout_
android:layout_weight="1"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@android:color/transparent"
/>



清单 3. 创建 ListView,并修改 MyMainActivity 类型的文件
        
public class MyMainActivity extends ListActivity {
private ArrayAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List postTitleList = new ArrayList();
try {
// 通过 HTMLParser 获取推荐文章题目列表,存放于 postTitleList 中
postTitleList = parserDwPost();
} catch (ParserException e) {
e.printStackTrace();
}
// 初始化 ListView 的 adapter 完成在 Android 界面上的显示
adapter = new ArrayAdapter(this, R.layout.dw_post_item);
if(postTitleList != null && postTitleList.size() > 0) {
for(String title : postTitleList) {
// 将 postTitleList 里面的内容显示在 listview 中
adapter.add(title);
}
}
setListAdapter(adapter);
}
}

4. 打开 DeveloperWorks 主页的网页源代码,可以发现

  • 其最新推荐文章列表是包含在“
    ”连接标签之中。
  • 每一个文章题目是包含在一个“
  • ”标签中。
  • 文章题目是一个连接标签

这样通过 HTML Parser 找到“

”标签,直接使用 HTML Parser 的接口,查询处于“
  • ”标签中的连接文字即可。关于详细 HTML Parser 的使用方法以及接口说明请查看附录资源。


    清单 4. HTMLParser 解析网页实现代码:
            
    private List parserDwPost() throws ParserException{
    final String DW_HOME_PAGE_URL = "http://www.ibm.com/developerworks/cn";
    ArrayList pTitleList = new ArrayList();
    // 创建 html parser 对象,并指定要访问网页的 URL 和编码格式
    htmlParser = new Parser(DW_HOME_PAGE_URL);
    htmlParser.setEncoding("UTF-8");
    String postTitle = "";
    // 获取指定的 div 节点,即
    标签,并且该标签包含有属性 id 值为“tab1”
    NodeList divOfTab1 = htmlParser.extractAllNodesThatMatch(
    new AndFilter(newTagNameFilter("div"), new HasAttributeFilter("id", "tab1")));

    if(divOfTab1 != null && divOfTab1.size() > 0) {
    // 获取指定 div 标签的子节点中的
  • 节点
    NodeList itemLiList = divOfTab1.elementAt(0).getChildren().extractAllNodesThatMatch
    (new TagNameFilter("li"), true);

    if(itemLiList != null && itemLiList.size() > 0) {
    for(int i = 0; i // 在
  • 节点的子节点中获取 Link 节点
    NodeList linkItem
    = itemLiList.elementAt(i).getChildren().extractAllNodesThatMatch
    (new NodeClassFilter(LinkTag.class),true);
    if(linkItem != null && linkItem.size() > 0) {
    // 获取 Link 节点的 Text,即为要获取的推荐文章的题目文字
    postTitle = ((LinkTag)linkItem.elementAt(0)).getLinkText();
    System.out.println(postTitle);
    pTitleList.add(postTitle);
    }
    }
    }
    }
    return pTitleList;
    }

  • 5. 运行 Android 工程,ListView 里显示 DeveloperWorks 主页上推荐的最新文章 , 每一个 ListItem 显示一条推荐文章的题目。


    图 6. 在 Android 应用中显示 DeveloperWorks 主页的最新推荐文章
    图 6. 在 Android 应用中显示 DeveloperWorks 主页的最新推荐文章  

    总结

    本文讲述了如何在 Android 应用中使用 HTML Parser 来解析网页内容,利用 Android 中 Library 工程,将 HTML Parser 源代码下载并且导入到一个 Android Library 工程中,在需要使用 HTML Parser 的工程中导入 HTML Parser Library 工程,并通过一个小的示例展示了其使用方式和基本功能,希望能够达到抛砖引玉的作用。


    参考资料

    学习

    • 请参考 developerWorks 文章 从 HTML 中攫取你所需的信息,了解相关内容。

    • 请参考 HTML Parser 项目首页,了解 HTML Parser 开源项目。

    • 请从 HTML Parser 源代码下载地址下载 HTML Parser。

    • 关于 Android 内容,参考专题:Android 开发从入门到精通。

    • 开发基于 Google Map 的 Android 应用是一篇针对移动地图的文章。

    • 随时关注 developerWorks 技术活动和 网络广播。

    • 访问 developerWorks Open source 专区获得丰富的 how-to 信息、工具和项目更新以及 最受欢迎的文章和教程,帮助您用开放源码技术进行开发,并将它们与 IBM 产品结合使用。

  • 推荐阅读
    • Nginx使用AWStats日志分析的步骤及注意事项
      本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
    • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
    • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
    • CSS3选择器的使用方法详解,提高Web开发效率和精准度
      本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
    • 如何实现织梦DedeCms全站伪静态
      本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
    • 本文详细介绍了PHP中与URL处理相关的三个函数:http_build_query、parse_str和查询字符串的解析。通过示例和语法说明,讲解了这些函数的使用方法和作用,帮助读者更好地理解和应用。 ... [详细]
    • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
      本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
    • Voicewo在线语音识别转换jQuery插件的特点和示例
      本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
    • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
    • Webmin远程命令执行漏洞复现及防护方法
      本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
    • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
      像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
    • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
    • 本文介绍了解决IE678伪类不兼容问题的方法,包括少用CSS3和HTML5独有的属性,使用CSS hacker,使用last-child清除浮动、批量添加标签、去掉list item最后一个的border-right等技巧。同时还介绍了使用after清除浮动时加上IE独有属性zoom:1的处理方法。另外,本文还提到可以使用jQuery代替批量添加标签的功能,以及使用负边距和CSS2选择器element+element去掉list item最后一个的border-right的方法。 ... [详细]
    • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
    • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
    author-avatar
    loto1115丨
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有