最近做项目用到了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. ssh_config sshd_config 详解
  2. 深度学习会不会被取代?深度学习必看发展史
  3. java ppt转html_word,ppt,excel转pdf,pdf转html工具类搭建
  4. java编程编一个小系统_如何编写一个java学生信息管理系统?
  5. CVE-2020-16875: Microsoft Exchange远程代码执行漏洞通告
  6. MyEclipse10 离线图文安装SVN插件教程
  7. python打开文件夹中的tiff_浅谈python下tiff图像的读取和保存方法
  8. OPPO A11解账号锁刷机包
  9. 西安邮电大学计算机学院教师,西安邮电大学计算机学院
  10. 【转】LaTeX 符号命令大全
  11. photoshop涂抹工具
  12. 论游戏程序员的自我修养(MiloYip)
  13. elementUI输入框只能输入数字解决方案
  14. android需要电脑输入吗,Android 远程输入法,用电脑给手机输入文字
  15. 用android实现GB28181监控客户端app
  16. 解决定时器导致页面卡顿、卡死的问题
  17. 一阶常微分方程的数值解法(二阶显式、隐式 Adams 公式及 Milne 方法)
  18. python程序设计基础刘艳网课_智慧职教APPPython程序设计基础(九江职业技术学院)题目答案...
  19. Keil MDK “Ivalid Rom Table”,“Device could not be powered up”的解决办法
  20. 美国计算机科学专业学校排名,美国计算机科学专业排名

热门文章

  1. C语言考试知识点汇总(理论知识点)
  2. Cesium中的Heading/Pitch/Roll
  3. 菜鸟教程Python教程100例(一)(持续更新)
  4. 个人账目管理系统oracle,个人账务管理系统(论文).doc
  5. webstorm+node之debug
  6. 前端视频播放初探总结,video标签-视频插件jwplayer
  7. 元数据 数据元 释义
  8. PCB制图 | Altium Designer 20下载与安装
  9. 黑苹果intel网卡驱动
  10. nexus下载及上传jar包