XPath:递归祖先搜索

XPath:递归祖先搜索,xpath,parent,ancestor,Xpath,Parent,Ancestor,选择当前节点后,我希望找到元素[./name]并返回文本内容。如果当前所选节点中不存在元素,我希望递归地检查父元素[./parent::name]等等,直到根,返回元素所在的最近父元素的值 可以用XPath完成吗?编辑:我第一次误解了这个问题 我建议使用 ancestor-or-self::name[1] 这将查找所有名称元素,从self、parent等开始,并按与self的距离递增的顺序排列它们。因此,选择[1]可以得到最接近的答案。编辑:我第一次误解了这个问题 我建议使用 ancestor

选择当前节点后,我希望找到元素[./name]并返回文本内容。如果当前所选节点中不存在元素,我希望递归地检查父元素[./parent::name]等等,直到根,返回元素所在的最近父元素的值


可以用XPath完成吗?

编辑:我第一次误解了这个问题

我建议使用

ancestor-or-self::name[1]

这将查找所有名称元素,从self、parent等开始,并按与self的距离递增的顺序排列它们。因此,选择[1]可以得到最接近的答案。

编辑:我第一次误解了这个问题

我建议使用

ancestor-or-self::name[1]

这将查找所有名称元素,从self、parent等开始,并按与self的距离递增的顺序排列它们。因此,选择[1]会得到最接近的答案。

根据我使用的祖先或自我的原始回答:*[name][1]/name。有区别吗?哪一个是首选的?有区别:您的表单可能会选择多个name元素。例如,如果您在HTML中查找表元素,它将为您的祖先表提供所有同级表,而这并不是您想要的IIUC。此外,在XPath中,通常最好使用较小的术语,并消除所有冗余表达式。这不仅会加快计算速度,而且会使表达式更易于理解——因为XPath很难编写和读取。我无法让它返回任何匹配项,其中祖先或self:*[name][1]/name生成所需的结果,从而否定您提到的结果。ancestor或self::*/nam姓氏[1]似乎有效。这个表达是否有它自己的问题?如果这个表达有效,而祖先或self::姓氏没有,那么姓氏就不是祖先。是这样吗?你现在的表达方式的问题是,它给了你所有祖先的姓氏。所以,如果你有多个祖先,他们都有姓子,你仍然可能会得到多个结果。根据你最初的回答,我使用了祖先或自我:*[name][1]/name。有区别吗?哪一个是首选的?有区别:您的表单可能会选择多个name元素。例如,如果您在HTML中查找表元素,它将为您的祖先表提供所有同级表,而这并不是您想要的IIUC。此外,在XPath中,通常最好使用较小的术语,并消除所有冗余表达式。这不仅会加快计算速度,而且会使表达式更易于理解——因为XPath很难编写和读取。我无法让它返回任何匹配项,其中祖先或self:*[name][1]/name生成所需的结果,从而否定您提到的结果。ancestor或self::*/nam姓氏[1]似乎有效。这个表达是否有它自己的问题?如果这个表达有效,而祖先或self::姓氏没有,那么姓氏就不是祖先。是这样吗?你现在的表达方式的问题是,它给了你所有祖先的姓氏。所以,如果你有多个祖先,他们都有姓子,你仍然可以得到多个结果。