我正在寻找合适的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 回答
我认为以下应该有效:
要将其分解:
ancestor::*[@select][1]
是具有select
属性的最近祖先 . 因此,我们只选择那些具有select
属性的最近祖先将此属性设置为'yes'
的节点 . 如果您还想包含具有select="yes"
属性的节点(在您的示例中为xyz
和gettingoutofnames
),则必须将ancestor
替换为ancestor-or-self
.用于选择值
用于选择否定结果
希望你能找到解决问题的方法