nekohtml+xpath实例,及注意事项
最近做项目用到了nekohtml+xpath
nekohtml将HTML文档解析为标准的DOM,再用XPath从DOM中抽取想要的结点。
nekohtml比起htmlparser还真是简单,但是简单就意味着不透明,出了错就不知是什么引起的,这一点真让人受不了。
下面先说说nekohtml+xpath的使用注意事项:
1.nekohtml会自动将html的标签转化为大写,因此写XPath时要用大写
//div 错误
//DIV 正确
2.用XPath处理时标签前要加命名空间,否则找不到结点,这里就要用到NamespaceContext这个类
class MyNamespaceContext implements NamespaceContext {private String ns;public MyNamespaceContext(String ns) {this.ns = ns;}public String getNamespaceURI(String prefix) {// TODO Auto-generated method stubif (prefix == null) {throw new NullPointerException("Null prefix");} else if (prefix.equals("pre")) {return this.ns;} else if (prefix.equals("xml")) {return XMLConstants.XML_NS_URI;}return XMLConstants.XML_NS_URI;}@Overridepublic String getPrefix(String namespaceURI) {// TODO Auto-generated method stubreturn null;}@Overridepublic Iterator getPrefixes(String namespaceURI) {// TODO Auto-generated method stubreturn null;}
}
实例化XPath,并设置命名空间
XPathFactory factory = XPathFactory.newInstance();XPath xpath = factory.newXPath();xpath.setNamespaceContext(new MyNamespaceContext("http://www.w3.org/1999/xhtml"));XPathExpression expr = xpath.compile("//pre:TITLE");
最后推介一个firefox的XPath插件--XPath checker
附近上源文件
nekohtml+xpath实例,及注意事项相关推荐
- html 修改下划线粗细,TextView设置内容下划线加粗等html样式实例及注意事项
TextView设置内容下划线加粗等html样式实例及注意事项 效果图 test01.png Java代码 package com.myapplication; import android.app. ...
- C语言strtok函数使用实例以及注意事项
C语言strtok函数使用 使用场景 代码实例 注意事项 参考 使用场景 字符串内容中被某个或者某些字符分割成若干部分,需要取出被分隔的若干个子字符串又不想去确定特殊字符的个数. 比如将下列字符串21 ...
- XPath实例教程十四、following-sibling轴
following-sibling轴(axis)包含上下文节点之后的所有兄弟节点 /AAA/BBB/following-sibling::* <AAA> &l ...
- XPath实例教程四、[]的作用
方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素. /AAA/BBB[1] 选择AAA的第一个BBB子元素 &l ...
- XPath实例教程十六、following轴
following轴(axis)包含同一文档中按文档顺序位于上下文节点之后的所有节点, 除了祖先节点,属性节点和命名空间节点 /AAA/XXX/following::* <AAA> ...
- XPath语法规则及实例
XPath语法规则及实例 XPath语法规则 一.XPath术语: 1.节点:在XPath中,有七种类型的节点:元素.属性.文本.命名空间.处理指令.注释以及文档(根)节点. XML文档是被作为节点树 ...
- flowable学习笔记(四):动态多实例
1.定义流程模板 [测试用户任务多实例]任务节点配置了以下属性: 集合(多实例):userList.这个创建流程实例时入参需要加上这个参数. 元素变量(多实例):user.工作流创建多实例时会将集合( ...
- Python:XPath与lxml类库
什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...
- CCNP实验:路由重分布注意事项
CCNP实验:路由重分布注意事项之一.重分布基础: 大家都知道,一般来说一个组织或者一个跨国公司很少只使用一个路由协议,而如果一个公司同时运行了多个路由协议,或者一个公司和另外一个公司合并的时候两个公 ...
- python xpath语法-Python爬虫之XPath语法和lxml库的用法
本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 安装 为什么要用这个库 ...
最新文章
- .html,.htm和.shtml的区别
- atan java_Java atan() 方法
- influxdb 客户端工具_性能工具之Jmeter小白入门系列之六
- SpringCloud工作笔记049---nginx的安装及配置为简单的文件服务器
- 一个根据相似度的去重方法
- 《sqoop实现hdfs中的数据导出至mysql数据库》
- 开关电路的三极管特性
- 【ArcGIS|空间分析|网络分析】1 创建网络数据集
- 深度神经网络分布式训练指引
- 奥鹏秋季计算机基础,14秋季奥鹏东北师范大学计算机应用基础离线作业
- Visio2013安装教程
- GitHub的简介翻译(草稿)
- 微信分享透明背景图片背景变黑
- 服务器装win7无限重启吗,win7下机子无限重启解决办法
- Go:内核线程、LWP、用户线程? 还是协程?
- #Vue3篇:watch、watchEffect、watchPostEffect、watchSyncEffect的区别
- 为什么我们要坚持写博客?
- php单位有哪些,css中的角度单位有哪些?
- js正则表达式匹配汉字
- 【机器学习】手写数字识别学习笔记(对三篇文件进行分析记录)