2013-07-02 182 views
3

假設我們具有這樣的結構(的b在每a數是未知的):選擇最前N個元素

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

我們如何表達的xpath以下短語:「嵌套成上層4b中的元素「

a/b[position() <= 4]由於顯而易見的原因返回全部6個元素。

我該如何將它限制爲4?

我發現(a/b)[position() <= 4]應該可以工作,但似乎是xpath 2.0。任何想法1.0版本?

回答

2

爲什麼這麼說

(A/B)位置()< = 4]應該工作,但似乎它的XPath 2.0

?這是完全合法的XPath 1.0,實際上這是一個常見的習慣用法。我只是測試它,以確認它被接受並正常工作。

它也可能比使用count(preceding::b)更高效,這取決於XPath處理器。

+0

嗯,我用PHP DOM XPath試了一下,它說表達式是錯誤的。所以一旦它只支持1.0,我認爲語法不是1.0 – zerkms

+0

現在再次檢查它,現在它工作。感覺很蠢:-S – zerkms

+0

@zerkms::-)有時候會發生在我身上...... – LarsH

4

不是很漂亮,但是這會檢查文檔中早些時候有多少個<b>

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

這並不完美。如果其他<b>不在<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] 
+0

就是這樣,謝謝 – zerkms