3

このような構造があると仮定します (bすべての数aは不明です)。

<a>
    <b/>
    <b/>
    <b/>
</a>
<a>
    <b/>
    <b/>
    <b/>
</a>

次のフレーズを xpath でどのように表現しますか: 「a にネストされた上位 4 つの b 要素」

a/b[position() <= 4]明らかな理由により、 は 6 つの要素すべてを返します。

どうすれば4つに制限できますか?

私はそれがうまくいく(a/b)[position() <= 4]はずだとわかったが、それはxpath 2.0. 1.0バージョンのアイデアはありますか?

4

2 に答える 2

4

見栄えはよくありませんが<b>、ドキュメントの前の方にある s の数を確認します。

a/b[count(preceding::b) < 4]

完璧ではありません。<b>s の中にない他の s がある場合、<a>失敗します。例えば:

<b>oops</b>
<a>
    <b/>
    <b/>
    <b/>
</a>
<a>
    <b/>
    <b/>
    <b/>
</a>

<b>oops</b>これは、要素によってつまずくことはありません。

a/b[count(preceding::b/parent::a) < 4]
于 2013-07-02T22:35:05.587 に答える
2

なぜあなたは言うのですか

(a/b)[position() <= 4] は機能するはずですが、xpath 2.0 のようです

? これは完全に正当な XPath 1.0 であり、実際、この目的でよく使われるイディオムです。受け入れられ、正しく動作することを確認するためにテストしました。

count(preceding::b)XPath プロセッサによっては、を使用するよりも効率的な場合もあります。

于 2013-07-03T13:47:04.500 に答える