2011-11-17 11 views
3

XMLから製品の乱数を選択し、複数の条件が必要です。XPATHノードの乱数を選択し、複数の条件がある

以下では8つの製品を選択しますが、ランダムではありません - ランダムにする方法は?

$ randomProducts = $ prod_xml->のXPath( "/製品/製品[位置()< 9]")。

以下に複数の条件を選択します。

$ featuredProducts = $ prod_xml->のxpath( '/製品/製品[= 1 と隠しを取り上げ= 1!]');

どのように2つを組み合わせて、非表示に設定されていないランダム機能商品を取得しますか?

答えて

2

最初にすべての非表示と機能の製品を取得するかどうかによってそれらの8を選択するか、または8製品を取得し、それらのすべてを選択し、別のXPath式:

/products/product[featured =1 and hidden !=1][position() < 9] 

とそれに対応:

/products/product[position() < 9][featured =1 and hidden !=1] 

さて、 "ランダム" の部分...

XPath 1.0とXPath 2.0(あるいはXPath 3.0とその標準関数のW3Cワーキングドラフトさえ)は、整数の擬似ランダムシーケンス(または何か)を返す関数を持っていません。

したがって、あなたは8 pseudorandomsのこのシーケンスを形成し、このようXPath式を生成する必要があります。

/products/product[featured =1 and hidden !=1] 
      [contains('|3|5|12|19|4|23|11|7|', concat('|',position(),'|)) ] 
関連する問題