大侠们我想问两个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,到底怎么样才能成功啊
散分吧。
tryinput = 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);
问题一:
假设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 父页面和子页面怎么互调方法?(跨域)