xpath クエリから受け取る結果の数を制限したい。
例えば:-
$info = $xml->xpath("//*[firstname='Sheila'] **LIMIT 0,100**");
あなたはそれを参照してくださいLIMIT 0,100
。
使用できるはずです"//*[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 を使用して、最初の 3 つの都市を取得できます。
//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 式を使用すると、次のようになります。
Node element0 Abu
position()
関数がより高い優先順位で評価されているため、2 番目と 3 番目の結果が失われていることに注意してください。」。
私自身も同じ問題に遭遇し、ジェフの回答に問題がありました。彼が明確に説明しているように、優先順位のためにクエリの他の部分を実行する前に返される要素の数を制限しています。
私の解決策はposition() < 10
、他の条件が適用された後に、追加の条件として を追加することです。
//ElementsIWant[./ChildElementToFilterOn='ValueToSearchFor'][position() <= 10]/.
2 つの個別の条件付きブロックを使用していることに注意してください。これにより、最初に私の条件に適合する要素が除外され、次にそれらのうちの 10 個のみが取得されます。