用PHP实现XSLT显示参数
我在下面的XSLT代码中传递参数用PHP实现XSLT显示参数,php,xslt,coldfusion,parameters,Php,Xslt,Coldfusion,Parameters,我在下面的XSLT代码中传递参数movieID <xsl:template match="movie"> <xsl:element name="a"> <xsl:attribute name="href">movie_details.php?movieID=<xsl:value-of select="@movieID"/></xsl:attribute> <xsl:value-of select="title"/>
movieID
<xsl:template match="movie">
<xsl:element name="a">
<xsl:attribute name="href">movie_details.php?movieID=<xsl:value-of select="@movieID"/></xsl:attribute>
<xsl:value-of select="title"/>
</xsl:element>
<xsl:element name="br" />
</xsl:template>
movie_details.xsl页面顶部包含以下参数:
<xsl:param name="movieID"/>
我得到一个空白页,没有显示任何信息
我可以使用下面的ColdFusion代码(movie_details.cfm)让它工作
#XML输出#
但是,我想对PHP也这样做。问题:
- 参数名
- 向变压器传递参数
$movieID
(而不是@movieID
):
movie_details.php?movieID=
传递参数
您必须更改要调用的PHP代码,因为它不接受其他参数
<?php
$xml = new DOMDocument();
$xml->load('movies.xml');
$xsl = new DOMDocument;
$xsl->load('movie_details.xsl');
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
$params = $_GET['movieID'];
$proc->setParameter('', 'movieID', $params );
echo $proc->transformToXML( $xml );
?>
问题:
- 参数名
- 向变压器传递参数
$movieID
(而不是@movieID
):
movie_details.php?movieID=
传递参数
您必须更改要调用的PHP代码,因为它不接受其他参数
<?php
$xml = new DOMDocument();
$xml->load('movies.xml');
$xsl = new DOMDocument;
$xsl->load('movie_details.xsl');
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
$params = $_GET['movieID'];
$proc->setParameter('', 'movieID', $params );
echo $proc->transformToXML( $xml );
?>
您的$params参数是否无效,因此transformToXML()
是否失败如果从transformToXML方法中检索到“false”,请使用libxml_get_last_error()或libxml_get_errors()来检索错误。“()我在movie_details.php页面上得到以下警告:“警告:XSLTProcessor::transformToXML()只需要1个参数,2个给定的参数”Alex,我相信警告是问题的关键。最好提及出现的任何警告或错误。请参阅@Dave的答案。@Alex:也显示一个示例XML文件。可能是因为$params参数无效,所以transformToXML()
失败了吗如果从transformToXML方法中检索到“false”,请使用libxml_get_last_error()或libxml_get_errors()来检索错误。“()我在movie_details.php页面上得到以下警告:“警告:XSLTProcessor::transformToXML()只需要1个参数,2个给定的参数”Alex,我相信警告是问题的关键。最好提及出现的任何警告或错误。请参阅@Dave的答案。@Alex:也显示一个示例XML文件。+1:我认为您关于setParameter()
的建议是正确的。然而,我不认为第一个XSLT样式表从PHP接收movieID参数;它是从XML输入中获得的,OP没有向我们展示。+1:我认为你关于setParameter()
的建议是正确的。然而,我不认为第一个XSLT样式表从PHP接收movieID参数;它是从XML输入中获取的,OP没有向我们展示。
<xsl:stylesheet>
<xsl:param name="movieID" />
<xsl:template match="movie">
<xsl:element name="a">
<xsl:attribute name="href">movie_details.php?movieID=<xsl:value-of select="$movieID"/></xsl:attribute>
<xsl:value-of select="title"/>
</xsl:element>
<xsl:element name="br" />
</xsl:template>
</xsl:stylesheet>
<?php
$xml = new DOMDocument();
$xml->load('movies.xml');
$xsl = new DOMDocument;
$xsl->load('movie_details.xsl');
$proc = new XSLTProcessor();
$proc->importStyleSheet($xsl);
$params = $_GET['movieID'];
$proc->setParameter('', 'movieID', $params );
echo $proc->transformToXML( $xml );
?>