jsoup getElementsByAttribute问题

时间:2012-10-24 11:14:37

标签: java html-parsing jsoup

这里输入代码

<table style=”padding: 0px; margin: 0px;” cellpadding="0" cellspacing="0" width="626" align="center" bgcolor="White" border="0">
<tr>
<td style=”vertical-align: top;” height="61" valign="top" bgcolor="#0492CB"><a href="http://www.aoec.com"> <img alt="AoEC" src="http://www.aoec.com/email/mute/images/header.gif" style="width: 626px; height: 61px;" border="0" /></a></td>
</tr>
</table>

java编码是

Document doc = Jsoup.parse(code);
Elements elements = doc.getElementsByAttribute("style");
for(int se=0;se<elements.size();se++)
{
 System.out.println(elements.get(se).attr("style"));
}

输出

padding:;
vertical-align:;

在上面的代码中,getElementsByAttribute(“style”)无效..

2 个答案:

答案 0 :(得分:2)

引号不是有效的属性分隔符。您需要直接引号:"'

你的代码很好。输入HTML无效。这必须报告给原始的HTML作者,以便他/她可以修复HTML(它也会破坏普通的webbrowser)。

如果此HTML不在您的控制范围内,请考虑使用String#replace()替换无效的引号。

code = code.replace('”', '"');

或者,如果环境中的字符编码尚未正确配置为UTF-8。

code = code.replace('\u201D', '"')

答案 1 :(得分:1)

我认为这已经弃用了。您应该使用.select();方法。另外,在循环遍历时使用foreach或迭代器是个好主意,因为一个简单的可能会抛出一些NullPointerExceptions

您可以找到它的文档here

但不是我会用它:

//That should get you all tags that have the style attribute
Elements elements = doc.select("[style]");

//That foreach should avoid exceptions, and loop through the collection 
for(Element element : elements) {
    //The print gets a little cleaner too!
    System.out.println(element.attr("style"));
}