如何使用xslt处理器将参数传递给xsl?

时间:2013-03-11 09:48:11

标签: xslt

尝试使用php xslt处理器将参数传递给我的样式表时,我得到一个空结果。任何想法将不胜感激!

PHP:

<?php 
$xsl = new DomDocument();
$xsl->load("style_listgastro.xsl");
$inputdom = new DomDocument();
$inputdom->load("XXX");
$proc = new XsltProcessor();
$xsl = $proc->importStylesheet($xsl);
$xsl = $proc->setParameter(null, 'k', $_GET['k']);
$newdom = $proc->transformToDoc($inputdom);
print $newdom->saveXML();
?>

XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"     xmlns:td="urn:schemas-XXX:Relationen">
<xsl:param name="k" />
<xsl:template match="/td:Relationen">
...
<xsl:apply-templates select="td:Benutzer_zu_Gastro">
<xsl:sort select="td:Gastroname"></xsl:sort>
</xsl:apply-templates>
...
</xsl:template>
<xsl:template match="td:Benutzer_zu_Gastro">
<xsl:if test="td:Kategorien = '{$k}'">
<li><a>
<xsl:attribute name="href">XXX</xsl:value-of>
</xsl:attribute>
<xsl:value-of select="td:Gastroname"></xsl:value-of>
</a></li>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

2 个答案:

答案 0 :(得分:2)

此行不正确:

<xsl:if test="td:Kategorien = '{$k}'">

它不会将td:Kategorien$k的值进行比较,而是将其与字符串值{$k}进行比较(我猜测td:Kategorien将永远不会有值{{} 1}})。相反,只需使用它:

{$k}

或者,更好的解决方法是将<xsl:if test="td:Kategorien = $k"> 行更改为:

apply-templates

并完全删除<xsl:apply-templates select="td:Benutzer_zu_Gastro[td:Kategorien = $k]">

答案 1 :(得分:0)

尝试使用''代替null作为setParameter()的第一个参数?