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

私は次のことがうまくいくと思います:

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

分解するには:属性ancestor::*[@select][1]を持つ最も近い祖先です。selectしたがって、属性を持つ最も近い祖先でselectこの属性がに設定されているノードのみを選択します'yes'。属性を持つノードも含める場合は、に置き換える必要があります(ancestorancestor-or-selfでは)。select="yes"xyzgettingoutofnames

于 2013-02-25T23:13:29.423 に答える
0

値を選択するため

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

否定結果を選択するため

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

あなたがあなたの問題のキャッチを理解することを願っています

于 2013-02-22T11:16:55.093 に答える