我有一个关于将参数从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 D:\include\bean\articles.php 在第 67 行
警告:XSLTProcessor::transformToXml():"select"表达式执行 不计算为节点集。在 D:\包含\bean\文章.php 在线 67
但是当我直接将字符串条件:"article[@key = 'journals/acta/Saxena96']"输入 xslt 时,它运行良好。
感谢您的任何建议。
您必须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。