几个不同的关键XPath概念......

绝对vs相对XPath(/vs .

  • / 引入绝对位置路径,从文档的根开始。

  • . 从上下文节点开始引入相对位置路径。

命名元素vs任何元素(enamevs *

  • /ename选择一个ename根元素

    • ./ename选择ename当前节点的所有子元素。

  • /* 选择根元素,无论名称如何。

    • ./*或者*选择上下文节点的所有子元素,而不管名称。

后代或自我轴(//*

  • //ename选择ename文档中的所有元素。

    • .//ename选择ename上下文节点或其下的所有元素。

  • //* 选择文档中的所有元素,无论名称如何。

    • .//* 选择上下文节点处或下方的所有元素,无论名称如何。


考虑到这些概念,以下是您具体问题的答案......

  • .//*[@id='Passwd']表示选择当前上下文节点或其下具有id属性值等于的 所有元素'Passwd'

  • //child::input[@type='password']可以简化为, //input[@type='password']并且意味着选择input文档中type属性值等于的所有元素'password'

/AAA/BBB/following-sibling::*    取/AAA/BBB节点的之后的所有同级节点

总共有八个轴关键字,parent,child,ancestor祖先,descendant后裔,following,following-sibling兄弟姐妹,preceding,preceding-sibling。具体含义如下:

  1. parent::div 上层父节点,你那叫div的亲生爸爸,最多有一个;
  2. child::div 下层所有子节点,你的所有亲儿子中叫div的;
  3. ancestor::div 上面所有直系节点,是你亲生爸爸或者你亲爹或者你亲爹的爸爸中叫div的;
  4. descendant::div 下面所有节点,你的后代中叫div的,不包括你弟弟的后代;
  5. following::div 自你以下页面中所有节点叫div的;
  6. following-sibling::div 同层下节点,你所有的亲弟弟中叫div的;
  7. preceding::div 同层上节点,你所有的亲哥哥以及他们的后代中叫div的;
  8. preceding-sibling::div 同层上节点,你所有的亲哥哥中叫div的;   

假设有这么一段html:

<div class="post-content">
<h1>Title</h1>
<p>Subtitle</p>
<img src="a.jpg">
<div>
<a href="example.html">Goto</a>
</div>
Bare text
<br>
<!-- this is html comment -->
<p>Bottom</p>
</div>

1 child::*

节点的所有子元素,如//div[@class="post-content"]/*,结果:

<h1>Title</h1>
<p>Subtitle</p>
<img src="a.jpg">
<div>
<a href="example.html">Goto</a>
</div>
<br>
<p>Bottom</p>

可以看到,这里只选择了有标签名的节点,不在标签内的Bare text和注释都被过滤了。

2 child::text()

节点的所有文本,如//div[@class="post-content"]/text(),结果:

Bare text

3 child::node()

节点下的所有内容,不论是标签还是文本还是其他,//div[@class="post-content"]/node(),结果:

    <h1>Title</h1>
<p>Subtitle</p>
<img src="a.jpg">
<div>
<a href="example.html">Goto</a>
</div>
Bare text
<br>
<!-- this is html comment -->
<p>Bottom</p>

原样输出了其下的所有内容。

参考:

http://www.imooc.com/wenda/detail/579577

https://www.cnblogs.com/zhaozhan/archive/2009/09/10/1564332.html

https://blog.csdn.net/hb5cn/article/details/84937449

https://www.cnblogs.com/wangyi0419/p/11638652.html

https://www.awaimai.com/2726.html

几个不同的关键XPath概念的更多相关文章

  1. <二>面向对象分析之几个关键的概念

    一:建模        --->建模,是指通过对[客观事物]建立一种抽象的方法用以表征事物并获得对事物本身的理解.同时把这种理解概念化,将这些逻辑概念组织起来,构成一种对所观察对象的内部结构和工 ...

  2. Drools Fusion (CEP) Example 和 关键概念

    Drools Fusion (Complex Event Processing) 是Drools对于复杂事件处理的模块, 与它功能相似的是Esper, 两者都可以提供基于时间跨度和滑动窗口的事件处理, ...

  3. [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念

      本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程?   java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的 ...

  4. XML中的XPATH和DTD

    大家好,乐字节小乐又来了,上次给大家说道的是XML解析,这次接着讲述XML文档中的语言:XPATH.DTD 一.先来说说XPATH 1.XPATH 概念 XPath 是一门在 XML 文档中查找信息的 ...

  5. CNN核心概念理解

    卷积神经网络 (Convolutional Neural Networks,简称CNN),是一种经典的神经网络算法.由于在图像识别领域取得的良好效果,随着人工智能的火热,它也受到越来越多的关注.CNN ...

  6. Java8 新特性 Lambda & Stream API

    目录 Lambda & Stream API 1 Lambda表达式 1.1 为什么要使用lambda表达式 1.2 Lambda表达式语法 1.3 函数式接口 1.3.1 什么是函数式接口? ...

  7. ​打造企业自己代码规范IDEA插件(中)

    一些基本概念 在开始独立研发公司自己的代码规范检查规则之前,先介绍一些相关的基本概念.阿里巴巴代码规范很多规则其实都是基于开源框架PMD进行的研发.PMD用官方的话语介绍来说:PMD是一个源代码分析器 ...

  8. 如何用 MEF 扩展应用程序

    最近在写一篇关于如何扩展 Visual Studio 编辑器的文章时,用到了 MEF,因此打算写一篇文章提一下这个技术点.本篇文章并不打算详细介绍 MEF,只是一个最简单的入门,相信您在阅读本篇文章后 ...

  9. EA方法论

    1 EA的定义 Enterprise Architecture,企业架构,简称EA.根据开放群组的业务领导层IT架构指引:“有效的企业架构(Enterprise Architecture,EA)对企业 ...

随机推荐

  1. POJ 1177 矩形周长并 模板

    Picture 题目链接 http://poj.org/problem?id=1177 Description A number of rectangular posters, photographs ...

  2. c++ 之private /protect/ public

    C++中public.protect.private的访问权限控制 访问权限 一个类的public成员变量.成员函数,可以通过类的成员函数.类的实例变量进行访问 一个类的protected成员变量.成 ...

  3. 串的模式匹配,KMP算法

    串的模式匹配 现考虑一个常用操作,在字符串s(我们称为主串)中的第pos开始处往后查找,看在主串s中有没有和子串p相匹配的的,如果有,则返回字串p第一次出现的位置. 暴力求解 int Index(ch ...

  4. Istio技术与实践02:源码解析之Istio on Kubernetes 统一服务发现

    前言 文章Istio技术与实践01: 源码解析之Pilot多云平台服务发现机制结合Pilot的代码实现介绍了Istio的抽象服务模型和基于该模型的数据结构定义,了解到Istio上只是定义的服务发现的接 ...

  5. 怎样获取xhr的当前状态

    一个XMLHttpRequets实例从创建到发起请求再到获取数据, 期间会有一些中间状态, 这些状态是必要的, 我们可以通过判断这些状态值来进行不同的动作. xhr中获取请求状态的属性是: xhr.r ...

  6. Win10怎么添加开机启动项?Win10添加开机自动运行软件三种方法

    Win10管理开机启动项的方法相信大家已经非常熟悉,msconfig命令各系统都通用,那么很多用户发觉Win10和Win7 XP等系统不同,没有启动文件夹,那么我们怎么添加开机启动项呢?如晨软件或程序 ...

  7. fish redux 个人理解

    fish redux 理解 fish redux是什么 Fish Redux 是一个基于 Redux 数据管理的组装式 flutter 应用框架, 它特别适用于构建中大型的复杂应用. 它的特点是配置式 ...

  8. 在Windows中 , 如何用leakdiag “自动”检测内存泄露 (自动记录日志)

    一.基本用法 在LeakDiag中选择aaa.exe 然后选择Windows Heap Allocator来跟踪heap的使用,按start开始,等一会按log,然后再stop 会在c:\leakdi ...

  9. MySQL5.7 启动报错:initialize specified but the data directory has files in it. Aborting.

    $ vi /etc/my.cnf ## datadir=/var/lib/mysql, 这个是data保存目录,进入/var/lib/mysql后,查看到确实有数据. #解决方法:将/var/lib/ ...

  10. LLVM的RTTI特性

    本文思路来源于http://llvm.org/docs/HowToSetUpLLVMStyleRTTI.html,叙述有不同,望谅解,希望能从其他方面帮助大家了解C++语言的底层实现. 背景 在LLV ...