XPath轴定位(轴和步)

时间:2024-03-19 12:53:54

XPath轴(Axes)

轴的意思是相对于当前结点的节点集

轴名称 结果
ancestor 选取当前结点的所有先辈(父、祖父等)
ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身
attribute 选取当前节点的所有属性。@id等价于attribute::id
child 选取当前节点的所有子元素,title等价于child:title
descendant 选取当前节点的所有后代元素(子、孙等)
descendant-or-self 选取当前节点的所有后代运算(子、孙等)以及当前节点本身
following 选取文档中当前节点的结束标签之后的所有结点
namespace 选取当前节点的所有命名空间节点
parent 选取当前节点的父节点
preceding 选取当前节点的父节点
preceding-sibling 选取当前节点之前的所有同级节点
self 选取当前节点。等驾驭self::node()

例:

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

步Step

步的语法轴名称:节点测试[谓语]

例子 结果
child::book 选取所有属于当前节点的只元素的book节点
attribute::lang 选取当前节点的lang属性
child::* 选取当前节点的所有只元素
attribute::* 选取当前节点的所有属性
child::text() 选取当前节点的所有文本子节点
child::node() 选取当前节点的所有子节点
descendant::book 选取当前节点的所有book后代
ancestor:book 选择当前节点的所有book先辈
ancestor-or-self::book 选取当前节点的所有book先辈以及当前节点(如果此节点是book节点)
child::*/child::price 选取当前节点的所有price孙节点

示例

//a/parent::h3

XPath轴定位(轴和步)

//div[@price<100]/child::div

XPath轴定位(轴和步)
//div[@price<100]/descendant::h2

XPath轴定位(轴和步)
//a/ancestor::div

XPath轴定位(轴和步)

//div[@id="testid"][2]/following::div
XPath轴定位(轴和步)
//div[@id="testid"][2]/following::li
XPath轴定位(轴和步)

//div[@id="testid"][2]/following-sibling::div[@id="go"]
XPath轴定位(轴和步)

//div[@id="testid"]/preceding::ul
XPath轴定位(轴和步)
//div[@id="testid"][2]/preceding-sibling::div

XPath轴定位(轴和步)

//a/attribute::href
XPath轴定位(轴和步)

//h3/child::*
选取当前节点的所有只元素
XPath轴定位(轴和步)

所有练习代码在:https://github.com/SaltNego/Web_Crawler_Notes