使用从PHP传递的参数进行XSLT比较/排序
我在使用从PHP传递到xsl文件的参数进行条件测试和排序时遇到了一个问题。我可以在测试字符串值的基础上进行匹配,并且可以使用显式名称进行排序,但无法让变量在这两种情况下工作。下面是XSL和相关XML的一个片段使用从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
<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 & Sightseeing</Group>
<Category>Full-day Tours</Category>
<Subcategory>City Tour</Subcategory>
</ProductCategory>
<ProductCategory>
<Group>Tours & Sightseeing</Group>
<Category>Bus & 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 & Excursions'" />
$processor->setParameter('', 'sortBy', 'v:'.$_GET['sort']);
$processor->setParameter('', 'catGroup', 'Day Trips & Excursions');
<xsl:sort select="*[name() = $sortBy]" order="ascending"/>
<xsl:param name="sortBy" select="'v:Rank'"/>