获取所有节点
获取符合某一特征的所有节点,用//
比如:获取a标签的所有节点,使用//a
比如:获取所有class为"m-b-sm"的h2节点,使用//h2[@class=“m-b-sm”]
获取子节点
获取某个节点下符合某一特征的所有子节点,使用/
比如:获取a标签下的h2节点,使用//a/h2
获取父节点
获取某个节点的父节点,使用/…/*和/…/@属性(这里应该是两个. ,由于编辑器的原因,成了三个.)
比如:获取a标签的所有父亲节点,使用//a/…/*(这里应该是两个. ,由于编辑器的原因,成了三个.)
比如,获取a标签的所有父亲节点的class属性,使用/…/@class(这里应该是两个. ,由于编辑器的原因,成了三个.)
也可以用/parent::*和/parent::/@属性,这种方式的能力比…/强。
比如:获取a标签的所有父节点,使用//a/parent::*
比如:获取a标签的所有父节点的class属性,使用//a/parent::/@class
比如:获取a标签的所有父节点中所有class属性为"bird"的父节点,使用//a/parent::[contains(@class,“bird”)]这种取值方式用…/是无法实现的
获取祖先节点
获取所有祖先节点,使用/ancestor::*
比如:获取a标签的所有祖先,使用//a/ancestor::*
**这个会直接找到最高一层的html节点,因此,其实作用不是很大
获取祖先节点中所有的div节点://a/ancestor::div
获取儿子节点
获取儿子节点使用/child::
获取所有的儿子节点:/a/child:: *
获取所有儿子节点中,class为name的li节点:/a/child::li[@class=“name”]
获取儿孙节点
获取儿孙节点使用/descendent::
获取所有儿孙节点:/a/descendent:: *
获取所有儿孙节点中的li节点:/a/descendent::li
获取当前节点后的所有节点
获取当前节点后的所有节点使用/following:: *
获取当前节点后的第2个节点:/a/following:: *[2]
获取当前节点后的所有同级节点
获取当前节点后的所有同级节点使用/following-sibling:: *
筛选出满足单个属性值的节点
当属性只有1个值的时候:
使用[@属性=“xxx”]可以获取属性为xxx的节点
比如获取class属性为"name"的所有li节点,使用//li[@class=“name”]
当属性有多个值的时候:
使用[contains(@属性名,属性值)]
有时一个标签的某个属性会有多个值,比如<–a class=“name blue” > <–/a>中,a标签的class属性就有两个属性值,如果此时想要获取所有使用了name类的a标签,该怎么过滤呢?可以使用//a[contains(@class,“name”)]
筛选出满足多个属性值的节点
使用and符号,可以筛选出同时满足多个属性值的节点
比如获取class=name,同时type=button的a标签,则为//a[@class=“name” and @type=“button”]
比如获取class包含name,同时type=button的a标签,则为//a[contains(@class,“name”) and @type=“button”]
获取文本值
获取文本值使用/text()方法。
比如获取h2标签的文本值,可以使用//h2/text()
这里要注意的是,如果标签有子标签,则text()会获取到换行符,换行符也属于标签的文本。这种情况下,如果使用/text(),获取的将全都是换行符,只有使用//text()才会获取到子标签中的文本。如果不想要换行符,最好是在子标签后使用换行符。
比如想要获取a标签的子标签h2的文本,则使用//a/h2/text()。
获取属性值
获取属性值使用/@属性的方法
比如获取h2的class属性值,可以使用//h2/@class
比如获取a标签的链接值,可以使用//a/@href
按照位置取元素
取第一个li元素: //li[1] 注意,就是从1开始数,而非从0开始数
取最后一个li元素://li[last()]
取前两个li元素: //li[position()❤️]
取倒数第3个li元素://li[last()-2]