大侠们我想问两个Android开发使用jsoup解析html的相关问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大侠们我想问两个Android开发使用jsoup解析html的相关问题相关的知识,希望对你有一定的参考价值。

帮帮忙啊,拜托了!
求助一下,我先上图片:

这里是代码:
protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);

TextView txt=new TextView(this);
File input=new File("file:///temp04_assets/txt01.htm");
try

Document doc=Jsoup.parse(input, "UTF-8");
Element infoTable = doc.getElementsByAttributeValue("class", "table002").first();
Elements tableLineInfos = infoTable.select("tr");
for (Element lineInfo : tableLineInfos)

String lineInfoContent = lineInfo.select("td").last().text().trim();
txt.setText(lineInfoContent);
setContentView(txt);


catch(IOException err)

err.getStackTrace();



这里是htm内的编码图:

问题有两个:
问题一:File input=new File("file:///temp04_assets/txt01.htm");这个里面的路径要如何写才能正确的读取到我保存在这个android程序下assets文件夹中的txt01.htm文件,并且能用jsoup操作。
问题二:我应该怎么样使用jsoup来有特定目的的去提取txt01.htm里面table的<td>标签内的文本内容,例如第二个<td>的“二月(小)十一 星期六 双鱼座”;或者第九个<td>的“吉神宜趋”,这些<td>我想各自单独显示出来。
拜托了,帮帮忙,分数好说啊!

问题:大侠们我想问两个Android开发使用jsoup解析html的相关问题

回答:第一个问题帮你解决了;第二个问题很简单(但你用错了),但没有你的这个htm文件,没有修改测试

super.onCreate(savedInstanceState);
TextView txt = new TextView(this);
InputStream input;
try 
input = getResources().getAssets().open("temp04_assets/txt01.htm");
int buffersize = input.available();// 取得输入流的字节长度
byte buffer[] = new byte[buffersize];
input.read(buffer);// 将数据读入数组
input.close();// 读取完毕后要关闭流。
String txthtml = EncodingUtils.getString(buffer, "UTF-8");// 设置取得的数据编码,防止乱码
Document doc = Jsoup.parse(txthtml);
Element infoTable = doc.getElementsByAttributeValue("class",
"table002").first();
Elements tableLineInfos = infoTable.select("tr");
for (Element lineInfo : tableLineInfos) 
String lineInfoContent = lineInfo.select("td").last().text()
.trim();
txt.setText(lineInfoContent);
setContentView(txt);

 catch (IOException err) 
err.getStackTrace();

追问

原网址在这里:

查看一下网页源代码就再复制到记事本,改一下记事本后缀为htm就可以了,能帮我测试一下吗,拜托了,T^T,到底怎么样才能成功啊

追答

散分吧。

try 
input = getResources().getAssets().open("temp04_assets/txt01.htm");
int buffersize = input.available();// 取得输入流的字节长度
byte buffer[] = new byte[buffersize];
input.read(buffer);// 将数据读入数组
input.close();// 读取完毕后要关闭流。
String txthtml = EncodingUtils.getString(buffer, "UTF-8");// 设置取得的数据编码,防止乱码
Document doc = Jsoup.parse(txthtml);

Map<String, String> mapInfos = new HashMap<String, String>();
Element infoTable = doc.getElementsByAttributeValue("class",
"table002").first();
Elements tableLineInfos = infoTable.select("tr");
for (Element lineInfo : tableLineInfos) 
Elements lineInfoContent = lineInfo.select("td");
mapInfos.put(lineInfoContent.get(0).text().trim(),lineInfoContent.get(1).text().trim()); 

String mySelected = "";
mySelected+= "农历: "+ mapInfos.get("农历:") + "\\r\\n";
mySelected+= "吉神宜趋: "+ mapInfos.get("吉神宜趋:") + "\\r\\n";
txt.setText(mySelected);
setContentView(txt);

参考技术A

问题一:

假设txt01.htm保存在assets文件夹的根目录下,那么正确的url是

"file:///android_asset/txt01.htm"

问题二:我对这个jsoup不是太熟悉,不过你的这个特定目的太过抽象,关于jsoup的常用选择器这里有介绍,你看看有没有符合你的目的的,或者说你必须确定你要找的对象是有一个明确的特异值才行。

http://www.open-open.com/jsoup/selector-syntax.htm

追问

大神……你这个路径我试了不行啊……真的没成功……
还有,那个jsoup的中文文档我也看过,好像必须有特异的才行,比如标签有id值或者class值,可是我的那些没有,本来想用contains来试试的,但也没成,拜托了,再帮帮忙想想吧T^T

追答

如果第一个路径不行的话,估计jsoup不支持内部asset流的方式来读取文件,那么用下面的方法吧

InputStream is=null;
try 
    is = getAssets().open("txt01.htm");
    Document doc = Jsoup.parse(is, "UTF-8");
 catch (IOException e) 
    e.printStackTrace();
 finally 
    if(is!=null)
        is.close();

以上是关于大侠们我想问两个Android开发使用jsoup解析html的相关问题的主要内容,如果未能解决你的问题,请参考以下文章

我想问一个用LINUX,还有ARM板,做一个点对点的视屏聊天系统,那位大侠可以给个提纲,我需要学习那些知识

各位大侠我想问一下 iframeresizer.js 父页面和子页面怎么互调方法?(跨域)

请问下各位大侠,小弟接触QT不到2个星期,想问下,用QT开发出的exe程序属性里如何能显示出版本的信息?

Android开发--使用JSOUP解析HTML页面

想问下百度地图 android API 的精度能到多少

使用AsyncTask在android中创建JSoup类