最近做项目用到了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实例,及注意事项相关推荐

  1. html 修改下划线粗细,TextView设置内容下划线加粗等html样式实例及注意事项

    TextView设置内容下划线加粗等html样式实例及注意事项 效果图 test01.png Java代码 package com.myapplication; import android.app. ...

  2. C语言strtok函数使用实例以及注意事项

    C语言strtok函数使用 使用场景 代码实例 注意事项 参考 使用场景 字符串内容中被某个或者某些字符分割成若干部分,需要取出被分隔的若干个子字符串又不想去确定特殊字符的个数. 比如将下列字符串21 ...

  3. XPath实例教程十四、following-sibling轴

    following-sibling轴(axis)包含上下文节点之后的所有兄弟节点 /AAA/BBB/following-sibling::*      <AAA>           &l ...

  4. XPath实例教程四、[]的作用

    方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素.   /AAA/BBB[1] 选择AAA的第一个BBB子元素      &l ...

  5. XPath实例教程十六、following轴

    following轴(axis)包含同一文档中按文档顺序位于上下文节点之后的所有节点, 除了祖先节点,属性节点和命名空间节点 /AAA/XXX/following::*      <AAA> ...

  6. XPath语法规则及实例

    XPath语法规则及实例 XPath语法规则 一.XPath术语: 1.节点:在XPath中,有七种类型的节点:元素.属性.文本.命名空间.处理指令.注释以及文档(根)节点. XML文档是被作为节点树 ...

  7. flowable学习笔记(四):动态多实例

    1.定义流程模板 [测试用户任务多实例]任务节点配置了以下属性: 集合(多实例):userList.这个创建流程实例时入参需要加上这个参数. 元素变量(多实例):user.工作流创建多实例时会将集合( ...

  8. Python:XPath与lxml类库

    什么是XML XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 的标签需要 ...

  9. CCNP实验:路由重分布注意事项

    CCNP实验:路由重分布注意事项之一.重分布基础: 大家都知道,一般来说一个组织或者一个跨国公司很少只使用一个路由协议,而如果一个公司同时运行了多个路由协议,或者一个公司和另外一个公司合并的时候两个公 ...

  10. python xpath语法-Python爬虫之XPath语法和lxml库的用法

    本来打算写的标题是XPath语法,但是想了一下Python中的解析库lxml,使用的是Xpath语法,同样也是效率比较高的解析方法,所以就写成了XPath语法和lxml库的用法 安装 为什么要用这个库 ...

最新文章

  1. .html,.htm和.shtml的区别
  2. atan java_Java atan() 方法
  3. influxdb 客户端工具_性能工具之Jmeter小白入门系列之六
  4. SpringCloud工作笔记049---nginx的安装及配置为简单的文件服务器
  5. 一个根据相似度的去重方法
  6. 《sqoop实现hdfs中的数据导出至mysql数据库》
  7. 开关电路的三极管特性
  8. 【ArcGIS|空间分析|网络分析】1 创建网络数据集
  9. 深度神经网络分布式训练指引
  10. 奥鹏秋季计算机基础,14秋季奥鹏东北师范大学计算机应用基础离线作业
  11. Visio2013安装教程
  12. GitHub的简介翻译(草稿)
  13. 微信分享透明背景图片背景变黑
  14. 服务器装win7无限重启吗,win7下机子无限重启解决办法
  15. Go:内核线程、LWP、用户线程? 还是协程?
  16. #Vue3篇:watch、watchEffect、watchPostEffect、watchSyncEffect的区别
  17. 为什么我们要坚持写博客?
  18. php单位有哪些,css中的角度单位有哪些?
  19. js正则表达式匹配汉字
  20. 【机器学习】手写数字识别学习笔记(对三篇文件进行分析记录)

热门文章

  1. 什么是ERPS?ERPS有什么作用?
  2. 21年,周杰伦越发孤独
  3. P4778 Counting swaps (组合数学,打表推通项公式,OEIS)
  4. 【优化模型】逐步回归算法
  5. 三菱GXWorks2 绘制梯形图
  6. 部分大学上演造假运动闯关本科评估(图)
  7. Java 删除非空文件夹
  8. windows下,可替换telnet的工具tcping.exe
  9. AR8035 linux
  10. C根据输入的城市坐标求各城市间的距离