在Android中解析HTML

3

我试图解析HTML以获取特定数据,但是在换行符方面遇到了问题,至少我认为这就是问题所在。我使用简单的子字符串方法来分解HTML,因为我预先知道我要查找什么。

以下是我的解析方法:

public static void parse(String response, String[] hashItem, String[][] startEnd) throws Exception
{

    for (i = 0; i < hashItem.length; i++)
    {
        part = response.substring(response.indexOf(startEnd[i][0]) + startEnd[i][0].length());
        value = part.substring(0, part.indexOf(startEnd[i][1]));
        DATABASE.setHash(hashItem[i], value);
    }
}

这是一个让我困扰的HTML示例。
<table cellspacing=0 cellpadding=2 class=smallfont>
<tr onclick="lu();" onmouseover="style.cursor='hand'">
<td class=bodybox nowrap>&nbsp;     21,773,177,147 $&nbsp;</td><td></td>
<td class=bodybox nowrap>&nbsp;        629,991,926 F&nbsp;</td><td></td>
<td class=bodybox nowrap>&nbsp;             24,537 P&nbsp;</td><td></td>
<td class=bodybox nowrap>&nbsp;                  0 T&nbsp;</td>
<td></td><td class=bodybox nowrap>&nbsp;RT&nbsp;</td>

文本中存在隐藏的回车字符,但当我尝试将它们添加到我正在使用的字符串中时,效果并不好,甚至根本无法工作。是否有一种方法或更好的方法来从HTML中剥离隐藏字符,使其更容易解析?非常感谢您的帮助。

4个回答

8
如果您想让解析变得非常简单,请尝试Jsoup
此示例将下载页面、解析并获取文本。
Document doc = Jsoup.connect("http://jsoup.org").get();

Elements tds = doc.select("td.bodybox");

for (Element td : tds) {
  String tdText = td.text();
}

Jsoup工作得非常好,谢谢。目前我唯一看到的问题是它会在开头和结尾给我额外的字符,例如:"Â 21,670,510,504 $Â",我相信这是由于HTML中的" "导致的。是否有办法让Jsoup删除它? - Alejandro Huerta
我解决了这个问题,我在使用Jsoup之前使用response.replaceAll("&nbsp", "")来处理它,这样就解决了问题。 - Alejandro Huerta
你也可以在之后使用以下代码替换:tdText.replace(Jsoup.parse("&nbsp;").text(), " "); - Michael Mrozek

1

0

我找出了replaceAll("\n", "")的错误之处,现在它已经正常工作了,谢谢。 - Alejandro Huerta

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接