用PHP实现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"/>

我在下面的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"/>
  </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 );
?>