2011-08-22 65 views
0
System.out.println(Jsoup.parseBodyFragment("<td>123</td>").html()); 

jsoup 1.5.2 OUTPUT:[JSOUP]为什么1.6.x版删除TD标签,问题升级到1.6.x的

<html> 
<head></head> 
<body> 
    <table> 
    <tbody> 
    <tr> 
    <td>123</td> 
    </tr> 
    </tbody> 
    </table> 
</body> 
</html> 

jsoup 1.6.x版(1.6.0和1.6。 1)OUTPUT:

<html> 
<head></head> 
<body> 
    123 
</body> 
</html> 

为什么1.6.x版删除TD标签?

如何在1.6.x中获得jsoup 1.5.x OUTPUT?

回答

2

在jsoup 1.6中,我重写了HTML解析器以实现whatwg HTML spec,它与浏览器当前解析HTML的方式相匹配。

这里的影响是在1.5中,一个<td>就足以自动生成一个<table>;但是浏览器实际上并不这样工作,所以在1.6版中,您需要更新HTML输入以引入<table>标签。

例如:

System.out.println(
    Jsoup.parseBodyFragment("<table><td>123</td></table>").html()); 

会产生:

<html> 
<head></head> 
<body> 
    <table> 
    <tbody> 
    <tr> 
    <td>123</td> 
    </tr> 
    </tbody> 
    </table> 
</body> 
</html> 

注意,<table><td>被标准化为<table><tbody><tr><td>...

希望这会有所帮助!

+0

谢谢您的回答乔纳森,在我的项目,我用Jsoup1.5.2和XPath来解析HTML,如:'

​​名​​年龄​​名​​年龄 ...
' ,我想得到所有'TR'字段,我使用'doc.select(“table tr”)'和'for(Element tr:trs)'和'trDoc.select(“td:ep(0)”)'和'trDoc.select(“td:ep(1)”)'获得'name'和'age',有没有办法使我的代码与1.5.x和1.6.x兼容? – Koerr