2012-04-11 47 views

回答

7

您應該能夠使用"//*[firstname='Sheila' and position() <= 100]

編輯:

鑑於以下XML:

<root> 
    <country.php desc="country.php" language="fr|pt|en|in" editable="Yes"> 
     <en/> 
     <in> 
      <cityList desc="cityList" language="in" editable="Yes" type="Array" index="No"> 
       <element0>Abu</element0> 
       <element1>Agartala</element1> 
       <element2>Agra</element2> 
       <element3>Ahmedabad</element3> 
       <element4> Ahmednagar</element4> 
       <element5>Aizwal</element5> 
       <element150>abcd</element150> 
      </cityList> 
     </in> 
    </country.php> 
</root> 

您可以使用以下XPath率先拿到三個城市:

//cityList/*[position()<=3] 

個結果:

Node element0 Abu 
Node element1 Agartala 
Node element2 Agra 

如果要將此限制與element啓動節點:

//cityList/*[substring(name(), 1, 7) = 'element' and position()<=3] 

注意,這後一個例子的作品,因爲你選擇所有 cityList的子節點,所以在這種情況下,Position()的作用是按預期限制結果。如果cityList節點下有其他節點名稱的混合,則會得到不理想的結果。
例如,改變XML如下:

<root> 
    <country.php desc="country.php" language="fr|pt|en|in" editable="Yes"> 
     <en/> 
     <in> 
      <cityList desc="cityList" language="in" editable="Yes" type="Array" index="No"> 
       <element0>Abu</element0> 
       <dog>Agartala</dog> 
       <cat>Agra</cat> 
       <element3>Ahmedabad</element3> 
       <element4> Ahmednagar</element4> 
       <element5>Aizwal</element5> 
       <element150>abcd</element150> 
      </cityList> 
     </in> 
    </country.php> 
</root> 

,並使用上述XPath表達式,我們現在得到

​​

請注意,我們正在失去的第二個和第三個結果,因爲position()函數以更高的優先級進行評估 - 與請求「給我前三個節點相同,現在超出了這些給了我所有以'element'開始的節點」。

+0

請您澄清一下您的問題嗎?你想從XML中提取什麼? – Geoff 2012-04-11 16:04:15

+0

感謝Geoff的回覆。但我的xml格式與 阿布阿加爾塔拉%2A 阿格拉 艾哈默德巴德前進到喜歡.... ABCD 我不得不選擇元素所以我的xpat h(/root/country.php/fr/cityList [position()<= 10])...但它不起作用,請幫助! – 2012-04-11 16:04:18

+0

傑夫......我在做分頁。我不得不選擇一堆中的節點[如element(n)]。 – 2012-04-12 05:52:14

0

我自己也遇到過同樣的問題,並且Geoffs的回答存在一些問題,正如他明確描述的那樣,由於優先級而限制了在執行查詢的其他部分之前返回的元素數量。

我的解決方案是將position() < 10添加作爲附加條件後,已應用我的其他條件,例如爲:

//ElementsIWant[./ChildElementToFilterOn='ValueToSearchFor'][position() <= 10]/. 

請注意,我用兩個獨立的條件塊。 這將首先過濾出符合我的條件的元素,其次只需要其中的10個。

相關問題