今天再看一个jsoup的问题时候,发现如下代码会出现问题:
Document doc = Jsoup.parse("<table><tr><td>0</td></tr></table>","http://www.iteye.com");
最后发现转换之后td中的内容就丢失了,然后仔细debug一下jsoup的代码,发现在TreeBuilderState这个类中有个nullString变量,内容为“0X0000”,悲剧了,它直接把0作为null字符串对待了,吃掉它了。
最后去http://search.maven.org/#artifactdetails%7Corg.jsoup%7Cjsoup%7C1.6.1%7Cjar,找了一下最新的1.6.1版本源码,发现代码已经发生了改变。前后2段代码如下:
private static String nullString = String.valueOf(0x0000); private static String nullString = String.valueOf('\u0000');
第一行是1.6.0中的代码,1.6.1中就已经是修改过的了。
后面的修改为\u0000,这样就一切搞定了。
把三方库升级到1.6.1就可以了,开源包在使用上还是要多注意一些,bug总是有的,估计有时候还需要自己去hack修复。选用三方库的时候还是慎重一些。不过就这次碰到的这个问题,是没有办法,htmlparser有它的bug无法满足要求。