NekoHtml xpath 解析内容时需要注意的地方
    如果需要在HTML页面中提取数据,那么NekoHTML 是个不错的工具。因为HTML跟XML不一样,可能存在一些格式不完整的元素,譬如没有end tag的table等,这个时候,NekoHTML是个很尽责的清道夫和修理工,可以帮助我们整理这些缺陷数据,最终生成一个DOM Tree。? 得到DOM Tree话,使用XPath就可以轻松获取所需数据了:-) 
? 下面是几个需要注意的问题: 
1、如何使用NekoHTML? 
???? 必须在 Java Build Path里加入 nekohtml.jar , xercesImpl.jar 以及xalan.jar。下载的NekoHTML目录中并没有xercesImpl.jar和xalan.jar,需要自己下载。 
2、如何获取XPath? 
??? 当然大家可以把网页的代码下下来,然后使用“人工智能”的方式获取,但是过程确实让人眼花缭乱、心力交瘁。使用FireBug吧,可以自动生成 XPath。 
??? updated: 
??? Firebug生成的XPath中如果含有TBODY标签,需要把TBODY去掉,否则不能正确获取网页的内容。如Firebug生成的XPath为 /html/body/table/tbody/tr,那么则需要修改为/html/body/table/tr。 
4、如何正确结合NekoHTML和XPath? 
??? XPath的Tag必须大写。如 
??? String divXpath = "//DIV";//正确 
??? String divXpath = "//div";//错误 
??? 
??? 节点的属性按照页面中实际的大小写进行书写 
??? 如: //DIV[@class="title"]/EM[@class="right"]/A 
?? 意思就是找到页面中div的class为title的大块,然后向下找节点为EM,同时其class为right的小块,再继续延伸找到此小块下的A节 点。 
需要注意的是,你写的xpath路径必须得是连续的,比如说 
<div class="title"> 
?? <div> 
????? <em class="right"><a></a></em> 
?? </div> 
</div> 
这个时候如果你按照上述的xpath来找a标签的话,很显然是找不到的,因为div class=“title”下是没有em的,对于新手需要特别注意。 
对于xpath的写法,可以参考 http://www.w3school.com.cn/xpath/ 
5.对于table的处理 
需要注意的是如果你给解析器的字符串是下面的这种形式 
<tbody> 
?? <tr> 
????? <td id="tag"><a href="http://blog.163.com/xing_mu_1/blog/sdfs.html">ABC</a></td> 
?? </tr> 
</tbody> 
如果我现在想要找上述内容中的td,给定XPATH //TD[@id='tag'],你会发现,程序根本无法找到这个node,原因是对于neko来说,对于一个不完整的table,他根本不会将其组装成 一个dom树,也就是说上面的内容经过解析器转换之后,就只会保留 
<a href='http://blog.163.com/xing_mu_1/blog/sdfs.html'> 
??? ABC 
</a> 
这一段内容,其他的已经被neko无视掉了。 
解决办法,在这段内容的前后加入一段table的闭合标签之后再放入解析器中进行解析 
<table> 
<tbody> 
?? <tr> 
????? <td id="tag"><a href="http://blog.163.com/xing_mu_1/blog/sdfs.html">ABC</a></td> 
?? </tr> 
</tbody> 
</table>