voglio limitare il numero di risultati che ricevo da query XPath.fa query XPath ha l'opzione Limite come MySQL
Ad esempio: -
$info = $xml->xpath("//*[firstname='Sheila'] **LIMIT 0,100**");
si vede che LIMIT 0,100
.
voglio limitare il numero di risultati che ricevo da query XPath.fa query XPath ha l'opzione Limite come MySQL
Ad esempio: -
$info = $xml->xpath("//*[firstname='Sheila'] **LIMIT 0,100**");
si vede che LIMIT 0,100
.
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'".
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.
La prego di chiarire la tua domanda, allora? Cosa stai cercando di estrarre da quell'XML? – Geoff
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 !! –
Geoff ... sto facendo l'impaginazione. dovevo selezionare i nodi [come l'elemento (n)] di un gruppo. –