Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用从PHP传递的参数进行XSLT比较/排序_Php_Xml_Xslt_Params - Fatal编程技术网

使用从PHP传递的参数进行XSLT比较/排序

使用从PHP传递的参数进行XSLT比较/排序,php,xml,xslt,params,Php,Xml,Xslt,Params,我在使用从PHP传递到xsl文件的参数进行条件测试和排序时遇到了一个问题。我可以在测试字符串值的基础上进行匹配,并且可以使用显式名称进行排序,但无法让变量在这两种情况下工作。下面是XSL和相关XML的一个片段 <Products xmlns:b="http://www.viator.com/affiliateXML2/base" xmlns="http://www.viator.com/vap"> <Product> <ProductName>Washingt

我在使用从PHP传递到xsl文件的参数进行条件测试和排序时遇到了一个问题。我可以在测试字符串值的基础上进行匹配,并且可以使用显式名称进行排序,但无法让变量在这两种情况下工作。下面是XSL和相关XML的一个片段

<Products xmlns:b="http://www.viator.com/affiliateXML2/base" xmlns="http://www.viator.com/vap">
<Product>
<ProductName>Washington DC Guided Day Tour</ProductName>
<ProductCategories>
<ProductCategory>
<Group>Tours &amp; Sightseeing</Group>
<Category>Full-day Tours</Category>
<Subcategory>City Tour</Subcategory>
</ProductCategory>
<ProductCategory>
<Group>Tours &amp; Sightseeing</Group>
<Category>Bus &amp; Minivan Tours</Category>
<Subcategory>City Coach Tour</Subcategory>
</ProductCategory>
</ProductCategories>
</Product>
</Products>

如果$sortBy param是一个元素QName,您可以执行以下操作:

<xsl:sort select="*[name() = $sortBy]" order="ascending"/> 

编辑:这是$sortBy的正确声明(必须是字符串):



根据这里的另一个答案,我曾经尝试过这个方法,希望它能起作用,但一直没能起作用。当我引用该参数时,该参数的值为“v:ProductName”(只是在xsl后面的img标记中将{$rating}替换为{$sortBy}),但仍然没有排序。如果我显式地使用sort select=“v:ProductName”,它将很好地排序。不确定这是否是名称空间问题,但如果是,则其他模板应该根本无法引用它,对吗?@Alejandro:用该信息更新了原始帖子
<xsl:param name="sortBy" select="v:Rank"/> 
<xsl:param name="catGroup" select="'Day Trips &amp; Excursions'" /> 
$processor->setParameter('', 'sortBy', 'v:'.$_GET['sort']); 
$processor->setParameter('', 'catGroup', 'Day Trips &amp; Excursions'); 
<xsl:sort select="*[name() = $sortBy]" order="ascending"/> 
<xsl:param name="sortBy" select="'v:Rank'"/>