XPATH选择随机数的节点并具有多个条件

时间:2011-11-17 10:58:07

标签: xpath random conditional-statements

我需要从XML中选择随机数量的产品详细信息并具有多个条件。

下面选择8个产品,但它们不是随机的 - 如何使这个随机?

  

$ randomProducts = $ prod_xml-> xpath(“/ products / product [position()<   9]“);

下面对多个条件进行选择。

  

$ featuredProducts = $ prod_xml-> xpath('/ products / product [featured = 1   并隐藏!= 1]');

如何将两者合并以获取未设置为隐藏的随机特色产品?

1 个答案:

答案 0 :(得分: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工作草案)都没有返回伪随机序列整数(或任何东西)的函数。

因此,您必须形成八个伪随机数的序列并生成一个XPath表达式:

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