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")]

但这并不是全部。任何帮助表示赞赏!

4

2 回答 2

1

I think the following should work:

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

To break it down: ancestor::*[@select][1] is the nearest ancestor with a select attribute. So we choose only those nodes for which the nearest ancestor with a select attribute has this attribute set to 'yes'. You have to replace ancestor with ancestor-or-self if you also want to include the nodes the have a select="yes" attribute (xyz and gettingoutofnames in your example).

于 2013-02-25T23:13:29.423 回答
0

用于选择值

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

用于选择否定结果

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

希望你能找出问题的关键

于 2013-02-22T11:16:55.093 回答