首页 文章

xpath让最近的祖先's attribute value decides if it'进入或不进入

提问于
浏览
1

我正在寻找合适的xpath表达式来选择最近的祖先具有适当属性值的所有节点,而不是选择那些最近的祖先具有明确的“不选择”属性值的节点 . 视觉解释:对于每个分支,遵循其到根的路径,并且第一次遇到某个属性时应确定它是否在选择中 .

<xyz select="yes">
    <blabla>this one's in</blabla>
    <qwerty select="no">this one's out
        <foobar>out please!</foobar>
        <gettingoutofnames select="yes">in again!</gettingoutofnames>
    </qwerty>
</xyz>

示例可以出现在XML结构中的任何位置 .

元素的名称可以是任何东西 . 'select =“yes”'和'select =“no”'可以按任何顺序排列,但最深的一个是其后代的决定性因素 .

我在想这样的事情:

//*[@select="yes"]//ancestor::*[not(@select="no")]

但这并不能解决所有问题 . 任何帮助表示赞赏!

2 回答

  • 0

    我认为以下应该有效:

    //*[ancestor::*[@select][1]/@select='yes']
    

    要将其分解: ancestor::*[@select][1] 是具有 select 属性的最近祖先 . 因此,我们只选择那些具有 select 属性的最近祖先将此属性设置为 'yes' 的节点 . 如果您还想包含具有 select="yes" 属性的节点(在您的示例中为 xyzgettingoutofnames ),则必须将 ancestor 替换为 ancestor-or-self .

  • 0

    用于选择值

    cat //*[contains(@select,'yes')]
    

    用于选择否定结果

    cat //*[not(contains(@select,'yes'))]
    

    希望你能找到解决问题的方法

相关问题