我有一个关于将参数从PHP代码传递到xslt的问题。 这是我的PHP代码:
$searchStr = 'article[@key = 'journals/acta/Saxena96']';
$xsltProcessor = new XSLTProcessor();
$xsltProcessor->registerPHPFunctions();
$xsltProcessor->importStyleSheet($this->xslDoc);
$xsltProcessor->setParameter('', 'search_condition', $searchStr);
这是XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html"/>
<xsl:template match="dblp">
<form>
<table border="1">
<tr bgcolor="#9acd32">
<th style="text-align:left">Auteur</th>
<th style="text-align:left">Titre</th>
<th style="text-align:left">Pages</th>
<th style="text-align:left">Volumne</th>
<th style="text-align:left">Journal</th>
<th style="text-align:left">Numéro</th>
<th style="text-align:left">URL</th>
<th style="text-align:left">EE</th>
<th style="text-align:left">Modification</th>
</tr>
<xsl:for-each select="$search_condition">
<tr>
<td>
<xsl:value-of select="author/text()"/>
</td>
<td>
<xsl:value-of select="title/text()"/>
</td>
<td>
<xsl:value-of select="pages/text()"/>
</td>
<td>
<xsl:value-of select="volume/text()"/>
</td>
<td>
<xsl:value-of select="journal/text()"/>
</td>
<td>
<xsl:value-of select="number/text()"/>
</td>
<td>
<xsl:value-of select="url/text()"/>
</td>
<td>
<xsl:value-of select="ee/text()"/>
</td>
<td>
</td>
</tr>
</xsl:for-each>
</table>
</form>
</xsl:template>
</xsl:stylesheet>
当我运行它时,我总是有错误消息:
警告:XSLTProcessor :: transformToXml():运行时错误:文件 file:/// D:/includes/xslt/article.xsl第31行for-each in 第67行的D:\ includes \ bean \ articles.php
警告:XSLTProcessor :: transformToXml():'select'表达式 不评估节点集。在D:\ includes \ bean \ articles.php上 67
但是当我直接输入字符串条件:'article [@key ='journals / acta / Saxena96']'进入xslt时,它运行良好。
感谢您的任何建议。
答案 0 :(得分:0)
您必须在stylesheet
级别定义参数:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:param name="search_condition">defaultValue</xsl:param>
...
</xsl:stylesheet>
您尝试将字符串作为for-each
中的XPath表达式进行迭代。
这不行。它将被视为字符串文字。
可能的解决方案是eXSLT dyn:evaluate。