NekoHTML技术预研说明.doc

上传人:scccc 文档编号:12397850 上传时间:2021-12-03 格式:DOC 页数:5 大小:72KB
返回 下载 相关 举报
NekoHTML技术预研说明.doc_第1页
第1页 / 共5页
NekoHTML技术预研说明.doc_第2页
第2页 / 共5页
NekoHTML技术预研说明.doc_第3页
第3页 / 共5页
NekoHTML技术预研说明.doc_第4页
第4页 / 共5页
NekoHTML技术预研说明.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《NekoHTML技术预研说明.doc》由会员分享,可在线阅读,更多相关《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能增补缺失的父元素、自动用结束

2、标签关闭相应的元素,以及不匹配的内嵌元素标签。NekoHTML的开发使用了Xerces Native Interface (XNI),后者是Xerces2(一个XML文档解析开源项目)的实现基础。本文关注的是它的“解析HTML文档”和“用标准的XML接口来访问其中的信息”这两个功能点。二、 NekoHTML的安装和环境配置1. 环境要求Jdk 1.3 或更高Xerces 2.0.0 或更高2. 下载安装从/nekohtml-1.9.6.1.zip 下载当前版本,版本号为1.9.6.1下载完成后,解压nekohtml-1.9.6.1.zip,并构建一个项目。将Xerces2的JAR文件添加到项目

3、构建路径中。注:使用nekohtml-1.9.6.1.zip自带的xercesMinimal.jar这个包时,有编译错误,本文使用的是从下载的Xerces。三、 NekoHTML调用说明:重要的是DOMParser 这个类,示例代码如下:DOMParser parser = new DOMParser();/ 创建一个NekoHTML解析器parser.parse("");/解析URL或HTML文档parser.getDocument();/获得一个标准的W3C DOM对象。得到Document对象之后,就可以对它进行XML解析了。转换时需关注的:Ø 被转换的HT

4、ML页面编码需为GBKØ 转换后得到的W3C DOM对象 的所有标签都都会转换为大写,但标签的属性不适用此特性。如:<table class="data" id="pieChart">标签会在转换后变为<TABLE class="data" id="pieChart">Ø NekoHTML的配置为了更加精确的控制解析的动作,nekohtml提供了相应的设置函数。如下列:/ settings on HTMLConfigurationorg.apache.xerces.xni

5、.parser.XMLParserConfiguration config =new org.cyberneko.html.HTMLConfiguration();config.setFeature("", true);config.setProperty("", "lower");/ settings on DOMParserorg.cyberneko.html.parsers.DOMParser parser = new org.cyberneko.html.parsers.DOMParser();parser.setFeatur

6、e("", true);parser.setProperty("", "lower");具体的参数配置参见HTML的解析。四、 XML 路径语言(XPath)XPath 是一种用于对 XML 文档的元件寻址的一种语言。适用Xpath可以方便的对DOM模型中的元素进行定位。Xerces2中提供了对Xpath的支持。另外使用nekoHTML转换后,得到的DOM模型与DOM4J使用的DOCUMENT不一样,所以不能使用DOM4J来搜索DOM中的元素XPath 表达式使用路径表示法(与 URL 中使用的路径表示法类似)寻址 XML 文档的各个

7、部分。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.getD

8、ocument(),expression ) /根据表达式从DOM模型中查找符合条件的NODE五、 NekoHTML管道过滤Ø 过滤器的实现:直接继承nekohtml的org.cyberneko.html.filters 包中的DefaultFilter然后实现自己的过滤器,要实现的方法是startDocument 和startElement下面是一个将HTML文档中的URL都加上同一前缀的过滤器实现:public class XMLDOCURLFilterImpl extends DefaultFilter public void startElement(QName elemen

9、t, XMLAttributes attributes,Augmentations augs) throws XNIException int count = attributes.getLength();for (int i = 0; i < count; i+) if(attributes.getQName(i).toLowerCase().equals("href") String value = attributes.getValue(i);if (value = null)continue;attributes.setValue(i,""

10、+value); super.startElement(element, attributes, augs); Ø 过滤器的配置:XML过滤器的配置代码:XMLDocumentFilter noop = new XMLDOCURLFilterImpl();/创建URL过滤器XMLDocumentFilter filters = noop ;/过滤器实例保存在一个数组中DOMParser parser = new DOMParser();/ 创建nekoHTML解析器parser.setProperty("", filters);/设置过滤器parser.parse

11、("D:workcosstest.html");/ 解析文件六、 关注的问题1. 对URL的处理可以利用XPATH搜索出所需要处理的URL节点,然后对其进行处理。示例代码:DOMParser parser = new DOMParser();/ 创建nekoHTML解析器parser.parse("D:workcosstest.html");/ 解析文件String expression = "/*href"/ XPath表达式Document doc = parser.getDocument();NodeList widgetNod

12、e = XPathAPI.selectNodeList(doc,expression);/ 根据表达式从DOM模型中查找符合条件的NODEif (widgetNode != null && widgetNode.getLength() > 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(&q

13、uot;href");att.setNodeValue(""+ att.getNodeValue();/对URL进行处理printDOMTree(widgetNode.item(i);save(doc,"20080313.xml");/保存XML文件2. css,script对CSS,SCRIPT标签的处理可以参考URL的处理方式,需注意的是对SCRIPT处理时,可以设置是否剥掉<script>元素中的<!- ->等注释符。设置代码:config.setFeature("", true);3. 删除不

14、需要的数据标签可以有两种方式把不需要的数据标签给去掉Ø 第一种方式是直接把需要的数据给提取出来,比如需要一个TABLE 中的数据,哪么可以根据TABLE标签及TABLE的ID来获取数据,可参看示例代码。Ø 第二种方式是使用nekoHTML管道过滤器功能。如果需要的数据标签已经确定,并且多个页面的数据标签都一致(同样的HTML标签名称及ID),则可以采用这种方式处理。这种处理方式局限性比较强,但可考虑将固定的,不需要的HTML标签先去除掉,减小DOM模型的大小。4. 被获取的URL资源需登陆的问题采用在URL后加JSESSIONID标示的方式解决,如:parser.parse

15、("66584A67EF1F5DD1BB64842AF5");5. 使用过滤管道对URL进行补全实现管道过滤器的时候,根据需要过滤的标签类型,实现不同的方法,如HREF标签在startElement(QName element, XMLAttributes attributes, Augmentations augs)方法中处理,而IMG标签则需要在emptyElement(QName element, XMLAttributes attributes, Augmentations augs)方法中进行处理。具体什么标签对应什么类型,可以参看org.cyberneko.ht

16、ml.HTMLElements这个类。代码片段:/ IMG - O EMPTYnew Element(IMG, "IMG", Element.EMPTY, BODY, null),其中的Element.EMPTY指明了标签类型,在使用过滤器调用时,如果碰到IMG标签,则会调用emptyElement方法进行过滤。如果类型标明为Element.EMPTY的标签,都需在emptyElement方法中进行过滤。若不是,则在startElement方法中过滤。6. 对文本的处理对节点文本的处理,使用的是characters(XMLString text, Augmentations augs)方法参考资料Ø HTML的解析int?bid=1&id=79262Ø Xpath语法Ø XML 路径语言(Xpath)(版本  1.0)手册5 / 5文档可自由编辑打印

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1