NekoHTML 技术预研说明.doc_第1页
NekoHTML 技术预研说明.doc_第2页
NekoHTML 技术预研说明.doc_第3页
NekoHTML 技术预研说明.doc_第4页
NekoHTML 技术预研说明.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NekoHTML技术预研说明一、NekoHTML功能简述1二、NekoHTML的安装和环境配置11.环境要求12.下载安装1三、NekoHTML调用说明:2四、XML 路径语言(XPath)3五、NekoHTML管道过滤3六、关注的问题41.对URL的处理42.css,script53.删除不需要的数据标签5参考资料6一、 NekoHTML功能简述NekoHTML是一个简单地HTML扫描器和标签补偿器,使得程序能解析HTML文档并用标准的XML接口来访问其中的信息。这个解析器能投扫描HTML文件并“修正”许多作者在编写HTML文档过程中常犯的错误。NekoHTML能增补缺失的父元素、自动用结束标签关闭相应的元素,以及不匹配的内嵌元素标签。NekoHTML的开发使用了Xerces Native Interface (XNI),后者是Xerces2(一个XML文档解析开源项目)的实现基础。本文关注的是它的“解析HTML文档”和“用标准的XML接口来访问其中的信息”这两个功能点。二、 NekoHTML的安装和环境配置1. 环境要求Jdk 1.3 或更高Xerces 2.0.0 或更高2. 下载安装从/sourceforge/nekohtml/nekohtml-.zip 下载当前版本,版本号为下载完成后,解压nekohtml-.zip,并构建一个项目。将Xerces2的JAR文件添加到项目构建路径中。注:使用nekohtml-.zip自带的xercesMinimal.jar这个包时,有编译错误,本文使用的是从/dist/xerces/j/Xerces-J-bin.2.9.1.tar.gz下载的Xerces。三、 NekoHTML调用说明:重要的是DOMParser 这个类,示例代码如下:DOMParser parser = new DOMParser();/ 创建一个NekoHTML解析器parser.parse();/解析URL或HTML文档parser.getDocument();/获得一个标准的W3C DOM对象。得到Document对象之后,就可以对它进行XML解析了。转换时需关注的: 被转换的HTML页面编码需为GBK 转换后得到的W3C DOM对象 的所有标签都都会转换为大写,但标签的属性不适用此特性。如:标签会在转换后变为 NekoHTML的配置为了更加精确的控制解析的动作,nekohtml提供了相应的设置函数。如下列:/ settings on HTMLConfigurationorg.apache.xerces.xni.parser.XMLParserConfiguration config =new org.cyberneko.html.HTMLConfiguration();config.setFeature(/html/features/augmentations, true);config.setProperty(/html/properties/names/elems, lower);/ settings on DOMParserorg.cyberneko.html.parsers.DOMParser parser = new org.cyberneko.html.parsers.DOMParser();parser.setFeature(/html/features/augmentations, true);parser.setProperty(/html/properties/names/elems, lower);具体的参数配置参见HTML的解析。四、 XML 路径语言(XPath)XPath 是一种用于对 XML 文档的元件寻址的一种语言。适用Xpath可以方便的对DOM模型中的元素进行定位。Xerces2中提供了对Xpath的支持。另外使用nekoHTML转换后,得到的DOM模型与DOM4J使用的DOCUMENT不一样,所以不能使用DOM4J来搜索DOM中的元素XPath 表达式使用路径表示法(与 URL 中使用的路径表示法类似)寻址 XML 文档的各个部分。Xpath表达式样例:/bookstore,/author,/TABLEid=pieChart具体的语法见Xpath语法示例代码:DOMParser parser = new DOMParser();/创建nekoHTML解析器parser.parse(D:workcosstest.html);/解析文件String expression = /TABLEid=pieChart;/XPath表达式Node widgetNode= XPathAPI.selectSingleNode(parser.getDocument(),expression ) /根据表达式从DOM模型中查找符合条件的NODE五、 NekoHTML管道过滤 过滤器的实现:直接继承nekohtml的org.cyberneko.html.filters 包中的DefaultFilter然后实现自己的过滤器,要实现的方法是startDocument 和startElement下面是一个将HTML文档中的URL都加上同一前缀的过滤器实现:public class XMLDOCURLFilterImpl extends DefaultFilter public void startElement(QName element, XMLAttributes attributes,Augmentations augs) throws XNIException int count = attributes.getLength();for (int i = 0; i 0) int sum = widgetNode.getLength();for (int i = 0; i sum; i+) Node node = widgetNode.item(i);NamedNodeMap map = node.getAttributes();Node att = map.getNamedItem(href);att.setNodeValue(80/+ att.getNodeValue();/对URL进行处理printDOMTree(widgetNode.item(i);save(doc,20080313.xml);/保存XML文件2. css,script对CSS,SCRIPT标签的处理可以参考URL的处理方式,需注意的是对SCRIPT处理时,可以设置是否剥掉元素中的等注释符。设置代码:config.setFeature(/html/features/scanner/script/strip-comment-delims, true);3. 删除不需要的数据标签可以有两种方式把不需要的数据标签给去掉 第一种方式是直接把需要的数据给提取出来,比如需要一个TABLE 中的数据,哪么可以根据TABLE标签及TABLE的ID来获取数据,可参看示例代码。 第二种方式是使用nekoHTML管道过滤器功能。如果需要的数据标签已经确定,并且多个页面的数据标签都一致(同样的HTML标签名称及ID),则可以采用这种方式处理。这种处理方式局限性比较强,但可考虑将固定的,不需要的HTML标签先去除掉,减小DOM模型的大小。4. 被获取的URL资源需登陆的问题采用在URL后加JSESSIONID标示的方式解决,如:parser.parse(http:/localhost:8899/numen/dashboard/monitorOverview.action;jsessionid=AB37EF66584A67EF1F5DD1BB64842AF5);5. 使用过滤管道对URL进行补全实现管道过滤器的时候,根据需要过滤的标签类型,实现不同的方法,如HREF标签在startElement(QName element, XMLAttributes attributes, Augmentations augs)方法中处理,而IMG标签则需要在emptyElement(QName element, XMLAttributes attributes, Augmentations augs)方法中进行处理。具体什么标签对应什么类型,可以参看org.cyberneko.html.HTMLElements这个类。代码片段:/ IMG - O EMPTYnew Element(IMG, IMG, Element.EMPTY, BODY, null),其中的Element.EMPTY指明了标签类型,在使用过滤器调用时,如果碰到IMG标签,则会调用emptyElement方法进行过滤。如果类型标明为Element.EMPTY的标签,都需在emptyElement方法中进行过滤。若不是,则在startElement方法中过滤。6. 对文本的处理对节点文本的处理,使用的是characters(XMLString text, Augmentations aug

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论