开源的Html解析程序中,NekoHtml是号称最好的一个。可是,它距离真正的浏览器的实现还有些距离。主要的问题是它提供的tag-banlance功能。本来呢,有这个功能比没有这个功能是要好很多的,只是遇到了中国这样的国家,必须面对乱七八糟的各种网页,于是,它就不怎么适用了。以下是一个简单的例子:
<head>
<div>haha</div>
<title>bad page</title>
</head>
经过NekoHtml的解析,会变成:
<html>
<head></head>
<body>
<div>haha</div>
<title>bad page</title>
</body>
</html>
可是,标准的IE(ff)解析应该为:
<html>
<head>
<title>bad page</title>
</head>
<body>
<div>haha</div>
</body>
</html>
更麻烦的问题是无法直接在NekoHtml上面进行任何修改,看来必须在下一层自己进行balance才行了。
NekoHtml处理banlance的某些策略值得借鉴,比如,某个标签可以属于哪个标签等等(这些都来自于html标准)。似乎有点灵感了。写上几句:
1,当节点不能够和其父亲满足属于关系的时候:
a) 节点可以属于父亲的父亲,那么,把节点变成父亲的前一个兄弟;实例:<table>a</table>;
b) 节点可以属于父亲的前一个或者后一个兄弟,那么,把节点变成父亲节点兄弟的最后一个孩子(或者第一个孩子);实例:<head><div>a</div></head><body></body>;
等需要的时候再改进。另外,鄙视zhuaxia.com的开发团队,因为它们的页面实在是乱七八糟的太厉害了。