将字符串作为参数传递到 PHP 中的 XSLT 中



我有一个关于将参数从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。

最新更新