XPath中parent::td与..表达式结果不同的原因咨询
为什么
//td[parent::td]和//td[..]结果不同? 先看你的XML结构:所有<td>的父元素都是<tr>,完全没有<td>嵌套在另一个<td>里的情况。
逐个拆解两个表达式:
//td[parent::td]
这个表达式的意思是:选择所有**父元素是<td>**的<td>元素。你的XML里根本不存在这种嵌套结构,所以自然返回空集。//td[..]
这里的..是parent::node()的简写,指代当前节点的父节点。而XPath里方括号的判断规则很简单:只要括号里的表达式结果不是空节点集、不是空字符串、不是数字0,就判定为真。
所以这个表达式实际是:选择所有存在父节点的<td>元素。你的XML里每个<td>都有<tr>当父节点,所以所有<td>都符合条件,自然返回全部元素。
核心区别
parent::td是精确要求父节点的类型必须是<td>,而..只是检查父节点是否存在——它不限制父节点的类型,只要有父节点就满足条件。
内容的提问来源于stack exchange,提问作者JobProcessTask
相关产品推荐
相关产品推荐

