0

<div>特定のクラスのaとその後の最初のクラスの間のすべてを選択しようとしています<hr>

このクエリで:

//div[@id='a']/*[preceding::div/@class='b' and following:hr[0]]

そしてこの例のHTML:

<div id="a">div a
    <div class="b">div b</div>
    <p>1</p>
    text1
    <a>2</a>
    text2
    <div>3</div>
    <hr>
    <div>4</div>
    <hr>
    <div>5</div>
    <hr>
</div>

divクラス「b」と最後 のクラスの間のすべてを取得しますhr。で選択するとhr[*n*]逆の順序で選択するようです。... and following::hr[last()]]最後の1時間までも選択します。これは、私が期待していたことです。この例で... and following::hr[2]は、最初のまでを選択しますhrが、実際には、いくつになるかについての保証はありません。最初にそれまで選択するにはどうすればよいhrですか?

4

1 に答える 1

1

まず、following::hr[0]ノードには1から番号が付けられているため、常に空のシーケンスになります。したがって、条件のこの部分はfalseであるため、クエリは何も選択しないはずです。

しかし、実際にはfollowing:hr[0]、名前空間プレフィックスを「following」と宣言していない限り、構文エラーになるはずです。どういうわけか、あなたが私たちに見せているコードはあなたが実行したコードではないと思います。

ここで、に変更したとしfollowing::hr[1]ます。hrこれは、hrと呼ばれる次の要素、つまり、説明している症状である最後までのすべてが含まれている場合に、すべてを選択します。

最初の1時間より前のノードを選択するには、前の時間がないノード、つまり、を選択しますnot(preceding::hr)

following-siblingあなたの「次の」軸と「前の」軸はすべてとである必要があると私が思うことを除いてpreceding-sibling

于 2013-02-03T09:04:31.617 に答える