HTML的三大概念:标签、元素以及属性

标签:尖括号中的文本       例:<head>……</head> 标签通常成对出现

元素:标签中的所有内容        元素中可包含元素

属性:标签的特殊标注等     例:<a href="http:\\www.baidu.com">……</a>  其中,href部分称为属性

使用XPath选择HTML元素

使用‘/’+标签名定位

例: /html/body        将定位到body部分

当某便签下出现多个同标签元素时,使用类似数组的方式定位到最准确的位置

切记:此处下标从1开始,而不是编程中常见的从0开始

例:/html/body/div/p[1]         返回相应位置的第一个p元素

/html/body/div/p             返回相应位置的所有p元素

对于大型文档,精确定位往往需要一个非常大的XPath表达式,为避免这种问题,我们可以使用‘//’语法

例://p         将会选择HTML中所有的p元素

  //a         将会选择HTML中所有的链接

同时,//语法可用于层次结构中

例://div//a       得到div元素下所有链接

  //div/a        得到div元素直接下级的所有链接

注意:元素下与元素直接下级的区别

此外,可通过符号@来直接定位标签属性

例://a/@href          得到所有链接中的href属性

使用text()函数,只选取文本

例://a/text()           得到所有链接中的文本信息

使用符号*选择指定层级的所有元素

//*[@itemprop="name"]           得到包含itemprop="name"的所有元素

选择包含某个特定属性或特定属性值的标签时使用如下结构

例://a[@href]      得到包含href属性的所有链接

  //a[@href="http://www.baidu.com"]      得到href值为“http://www.baidu.com”的所有链接

此外,还可以使用以特定子字符起始或包含的能力

例://a[starts-with(@href, "http://")]           得到href属性以http://为起始的所有链接

  //a[contains(@href, "baidu")]              得到href属性包含baidu的所有链接

  //a[not (contains(@href, "baidu"))]     得到所有href属性不包含baidu的链接

更多类似函数,参照http://www.w3schools.com/xsl/xsl_functions.asp

在使用XPath时,应尽量

  避免使用数组索引;

  避免使用与数据关系不密切的类名;

  使用面向数据的类名;

  ID通常都比较可靠(例外情况:以编程方式生成的包含唯一标记的ID     如“order-F5568”;此外,还需注意部分HTML中ID不唯一的情况)

最新文章

  1. 城管停车执法打印APP 移动云POS 现场打印告知单-执法平台+智能POS客户端系统
  2. C语言中的break、continue和goto三者的区别与用法
  3. [LeetCode] Edit Distance(很好的DP)
  4. linux ptrace II
  5. java 从零开始,学习笔记之基础入门&lt;Oracle_基础&gt;(三十三)
  6. JS - 提示是否删除
  7. memset用法总结
  8. 斗牛app上架应用宝、牛牛手机游戏推广、百人牛牛app应用开发、棋牌游戏上传、手游APP优化
  9. python 项目实例
  10. IOS开发中关于runtime的认识
  11. Jupyter配置步骤
  12. layui 弹出层监听 判断弹出框的大小
  13. Android View事件分发-从源码分析
  14. IO流(1)File类构造方法
  15. webpack4重新梳理一下
  16. windows环境下mongodb下载、安装和使用总结
  17. properties文件不能输入中文
  18. RefWorks
  19. Gradle sync failed: Cannot set the value of read-only property &#39;outputFile&#39;
  20. Open SQL和Native SQL到底有什么本质的区别

热门文章

  1. SQL点点滴滴_查询类型和索引-转载
  2. mongodb 3.4复制搭建
  3. 【Leetcode】【Medium】3Sum
  4. 修改容器的hosts文件
  5. 大数据平台搭建:Hadoop
  6. 2维FFT算法实现——基于GPU的基2快速二维傅里叶变换
  7. 【java基础】随手写的一个日期计算,新手可以看看
  8. newcoder NOIP提高组模拟赛C题——保护
  9. Centos 7 安装Anaconda3
  10. select、poll和epoll比较