2020-07-24 17:30:50
是的,XPath中的.语法代表当前上下文节点,它是XPath中用于相对路径导航、谓语条件判断和函数参数的基础且关键的符号。以下是详细说明:
核心作用:.明确指向当前正在处理的节点或属性,作为相对路径的基准点,避免从文档根节点开始搜索,提升定位效率。例如:
./span:表示当前节点下的所有<span>子元素。
string(.):返回当前节点的文本内容。
contains(., '关键词'):判断当前节点的文本是否包含特定关键词。
与谓语([])结合:在谓语中,.代表被筛选的节点本身,显式使用可增强表达式可读性,尤其在复杂嵌套条件中。例如:
//div[./@id='main']:查找id属性为main的<div>元素。
//div[./p]:查找包含<p>子元素的<div>元素。
与轴(Axes)结合:.可与其他XPath轴(如parent::、ancestor::、preceding-sibling::等)组合,实现灵活导航。例如:
//span[@class='price']/..:通过..(父节点轴)找到包含<span class="price">的父元素。
//span[text()='输入错误']/preceding-sibling::input[1]:在<span>的上下文中查找紧邻的前一个<input>兄弟节点。
与函数结合:.常作为函数参数,明确操作对象。例如:
count(./li):计算当前节点下的<li>子元素数量。
name(.) = 'div':检查当前节点的名称是否为div。
与..的区别:
.:当前节点,用于向下或同级导航。
..:父节点,用于向上导航。例如:
//button[text()='提交']/../@id:找到文本为“提交”的按钮,并获取其父元素的id属性。
复杂结构中的精准定位:在多层嵌套或条件复杂的文档中,.可结合谓语和轴实现模块化查询。例如:
查找<div>元素,其class为product且包含文本为“库存充足”的<span>://div[./@class='product' and ./span[text()='库存充足']]
查找<li>元素,其<p>包含“特价”且<img>的src属性非空://li[./p[contains(., '特价')] and ./img[not(@src='')]]
最佳实践:
显式使用.:在谓语或函数中显式使用.(如./@href而非@href),可减少歧义,提升代码可维护性。
模块化查询:将复杂条件拆分为多个谓语,每个谓语基于.独立验证,例如://div[./@class='card' and ./p[contains(string(.), '详情')]]
通过合理使用.语法,XPath表达式可实现高效、精确的节点定位,尤其适用于复杂文档结构的解析与数据提取。