2011-11-17 2 views
3

Мне нужно выбрать случайное число деталей продукта из XML и иметь несколько условий.XPATH выбирает случайное число узлов и имеет несколько условий

Ниже выберете 8 продуктов, но они не являются случайными - как сделать это случайным?

$ randomProducts = $ prod_xml-> XPath ("/ Продукты/продукта [положение() < 9]");

Ниже представлен выбор на нескольких условиях.

$ featuredProducts = $ prod_xml-> XPath ('/ продукты/продукт [признакам = 1 и скрытые = 1]');

Как объединить эти два, чтобы получить случайные продукты, которые не установлены в скрытые?

ответ

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 (или даже рабочие черновики W3C для XPath 3.0 и его стандартные функции) не имеют функции, которая возвращает псевдослучайную последовательность целых чисел (или чего-то еще).

Таким образом, вы должны сформировать эту последовательность из восьми pseudorandoms и генерировать выражение XPath, как это:

/products/product[featured =1 and hidden !=1] 
      [contains('|3|5|12|19|4|23|11|7|', concat('|',position(),'|)) ] 
Смежные вопросы