2012-04-11 12 views

risposta

7

Si dovrebbe essere in grado di utilizzare "//*[firstname='Sheila' and position() <= 100] "

Edit:

Dato il seguente codice 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> 

È possibile utilizzare il seguente XPath per ottenere i primi tre città:

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

Risultati:

Node element0 Abu 
Node element1 Agartala 
Node element2 Agra 

Se si desidera limitare questo per i nodi che iniziano con element:

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

Si noti che quest'ultimo esempio funziona perché si sta selezionando tutte i nodi figlio di cityList, quindi in questo caso Position() funziona per limitare i risultati come previsto. Se ci fosse un mix di altri nomi di nodi sotto il nodo cityList, otterresti risultati indesiderati.
Ad esempio, modificare il codice XML come segue:

<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> 

e utilizzando l'espressione XPath sopra, ora otteniamo

Node element0 Abu 

Si noti che stiamo perdendo il secondo e terzo risultato, perché il position() la funzione sta valutando in un ordine superiore di precedenza - lo stesso che si richiede "dammi i primi tre nodi, ormai fuori di quelli che mi danno tutti i nodi che iniziano con 'elemento'".

+0

La prego di chiarire la tua domanda, allora? Cosa stai cercando di estrarre da quell'XML? – Geoff

+0

Grazie Geoff per la risposta. ma il mio formato XML è molto diverso come Abu Agartala% 2A Agra Ahmedabad continua a piacere .... abcd ho dovuto selezionare gli elementi quindi il mio xpat h (/root/country.php/fr/cityList [position() <= 10]) ... ma non funziona, per favore aiutatemi !! –

+0

Geoff ... sto facendo l'impaginazione. dovevo selezionare i nodi [come l'elemento (n)] di un gruppo. –

0

incontrato lo stesso problema me stesso e ho avuto qualche problema con il Geoffs risposta poiché, come egli descrive chiaramente, limita il numero di elementi restituiti prima di eseguire le altre parti della query a causa di precedenza.

La mia soluzione è quella di aggiungere il position() < 10 come un ulteriore condizionale dopo che sono state applicate le altre condizioni ad es .:

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

Si noti che sto usando due blocchi condizionali separati. In questo modo verranno filtrati gli elementi che corrispondono alle mie condizioni e in secondo luogo ne prenderanno solo 10.