今天学习一下用Jsoup解析Html网页和Epub文档
首先把Jsoup的jar包放入工程的libs文件夹下(jsoup jar包大家可以去github或者网上搜索下载)
我们解析的地址为csdn移动板块 点击打开链接http://mobile.csdn.net/
首先在MainActivity.class中添加如下代码:
//要解析的HTML地址 private String url="http://mobile.csdn.net/"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); parseHtml(); }
网页内容:
下面看一下它的源码:
我们要解析出文章的标题 就要找到文章列表开始的标签 图中第一个红框标识的位置<div class="unit">就是文章列表的开始标签(不太明白的同学可以先了解一下html的基本知识),所以此处我们用Elements elements=doc.select("div.unit")来获取要解析的标签,然后用element.getElementsByTag("h1").first().text()方法获取文章标题,用element.getElementsByTag("h1").first().getElementsByTag("a").first().attr("src")获取<h1>标签下<a>标签后的链接,具体代码如下:
/** * 解析HTML */ private void parseHtml() { new Thread(){ public void run() { try { //GET方法请求数据 Document doc=Jsoup.connect(url).get(); //选择要解析的元素标签 Elements elements=doc.select("div.unit"); for (Element element : elements) { String title=element.getElementsByTag("h1").first().text(); String href=element.getElementsByTag("h1").first().getElementsByTag("a").first().attr("src"); Message msg=new Message(); msg.obj=(title+"--"+href); msg.what=1; mHandler.sendMessage(msg); } } catch (IOException e) { e.printStackTrace(); } }; }.start(); }
private Handler mHandler=new Handler(){ public void handleMessage(android.os.Message msg) { if (msg.what==1) { String str=msg.obj.toString(); Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show(); System.out.println("--str--"+str); } }; };
<uses-permission android:name="android.permission.INTERNET"/>
Html网页解析成功,下面我们解析Epub文档:
要解析的事先下好的Epub文件放入assets文件夹下:
由于和解析html几乎相同,这里就直接列出代码:
在MainActivity.class添加如下方法:
/** * 解析Epub */ private void parseEpub(){ try { //打开文件 InputStream is=getAssets().open("fb.ncx"); int size=is.available(); byte buffer[]=new byte[size]; is.read(buffer); is.close(); String epubType=new String(buffer,"utf-8"); Document doc=Jsoup.parse(epubType); String doctitle=doc.getElementsByTag("docTitle").first().text(); Elements elements=doc.getElementsByTag("navPoint"); for (Element element : elements) { String title=element.text(); String href=element.getElementsByTag("content").attr("href"); Message msg=new Message(); msg.obj=title+"=="+href; msg.what=1; mHandler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); } }
至此,完成html和epub的解析:
全部代码如下:
public class MainActivity extends Activity { //要解析的HTML地址 private String url="http://mobile.csdn.net/"; private Handler mHandler=new Handler(){ public void handleMessage(android.os.Message msg) { if (msg.what==1) { String str=msg.obj.toString(); Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show(); System.out.println("--str--"+str); } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //parseHtml(); parseEpub(); } /** * 解析HTML */ private void parseHtml() { new Thread(){ public void run() { try { //GET方法请求数据 Document doc=Jsoup.connect(url).get(); //选择要解析的元素标签 Elements elements=doc.select("div.unit"); for (Element element : elements) { String title=element.getElementsByTag("h1").first().text(); String href=element.getElementsByTag("h1").first().getElementsByTag("a").first().attr("src"); Message msg=new Message(); msg.obj=(title+"--"+href); msg.what=1; mHandler.sendMessage(msg); } } catch (IOException e) { e.printStackTrace(); } }; }.start(); } /** * 解析Epub */ private void parseEpub(){ try { //打开文件 InputStream is=getAssets().open("fb.ncx"); int size=is.available(); byte buffer[]=new byte[size]; is.read(buffer); is.close(); String epubType=new String(buffer,"utf-8"); Document doc=Jsoup.parse(epubType); String doctitle=doc.getElementsByTag("docTitle").first().text(); Elements elements=doc.getElementsByTag("navPoint"); for (Element element : elements) { String title=element.text(); String href=element.getElementsByTag("content").attr("href"); Message msg=new Message(); msg.obj=title+"=="+href; msg.what=1; mHandler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); } } }