2013-03-15 67 views
1

我想通过使用ColdFusion在XSLT文件中通过URL传递两个参数。使用ColdFusion在URL中传递两个参数的XSLT

这是我的XSLT代码:

<xsl:template match="/"> 
    <xsl:text>Actors: </xsl:text> 
    <xsl:apply-templates select="/movies/movie/actors/actor/name"/> 
</xsl:template> 

<xsl:template match="name"> 
     <xsl:element name="a"> 
      <xsl:attribute name="href">actor_details.cfm?movieID=<xsl:value-of select="../../../@movieID"/>&amp;actorID=<xsl:value-of select="../@actorID"/></xsl:attribute> 
      <xsl:value-of select="." /> 
     </xsl:element> 
     <xsl:element name="br" /> 
</xsl:template> 

这是我actor_details.cfm文件

<cfset MyXmlFile = Expandpath("test.xml")> 
<cffile action="READ" variable="xmlInput" file="#MyXmlFile#"> 
<cfset MyXslFile = Expandpath("actor_details.xsl")> 
<cffile action="READ" variable="xslInput" file="#MyXslFile#"> 

<cfset xslParam = StructNew() > 
<cfset xslParam["movieID"] = "#url.movieID#" > 

<cfset xmlOutput = XMLTransform(xmlInput, xslInput, xslParam)> 
<!--- data is output ---> 
<cfcontent type="text/html" reset="yes"> 
<cfoutput>#xmloutput#</cfoutput> 

这是基于这样的我actor_details.xsl文件

<xsl:param name="movieID"/> 

<xsl:template match="/"> 
    <title>Actor details</title> 
    <xsl:apply-templates select="/movies/movie[@movieID=$movieID]/actors/actor[@actorID=$actorID]"/> 
</xsl:template> 

<xsl:template match="actor"> 
    <xsl:text>Name: </xsl:text> 
    <xsl:value-of select="name"/> 
    <xsl:element name="br"/> 
    <xsl:text>Age: </xsl:text> 
    <xsl:value-of select="age"/> 
    <xsl:element name="br"/> 
</xsl:template> 

movieID和actorID通过URL传递,actor_details页面应该显示演员的姓名和年龄。我对ColdFusion非常陌生,我无法弄清楚如何接收ColdFusion通过URL传递的参数。我在actor_details.cfm页面上收到意外的错误。

我想问题在于actor_details.cfm页面的某处,但我无法弄清楚它是什么。

我的XML文件:

<movie movieID="1"> 
    <actors> 
     <actor actorID="1"> 
      <name>Bob</name> 
      <age>23</age> 
     </actor> 

     <actor actorID="2"> 
      <name>Jack</name> 
      <age>25</age> 
     </actor> 

     <actor actorID="3"> 
      <name>James</name> 
      <age>38</age> 
     </actor> 
    </actors> 
</movie> 

<movie movieID="2"> 
    <actors> 
     <actor actorID="1"> 
      <name>Mike</name> 
      <age>19</age> 
     </actor> 

     <actor actorID="2"> 
      <name>Daniel</name> 
      <age>29</age> 
     </actor> 

     <actor actorID="3"> 
      <name>Phil</name> 
      <age>41</age> 
     </actor> 
    </actors> 
</movie> 
+0

在您的操作页面上执行。 – 2013-03-16 00:43:40

+0

好吧,我已经完成了,它为第一个演员显示“结构actorID 1,MovieID 1”。如果我点击其他名称,它会根据actorID和movieID正确显示结构。所以它似乎工作,但我仍然在下面意想不到的错误。我不知道为什么。 – Alex 2013-03-16 00:51:09

+0

另外,如果您没有稳健的调试输出和日志记录,请在您的开发服务器的管理员中打开它,它将对您有很大的帮助。确保选择应用程序,会话,CGI范围输出。它会减慢你的页面,但你只能打开你的IP和开发服务器。 – 2013-03-16 01:16:31

回答

0

我已经通过将<cfset xslParam["actorID"] = URL.actorID >添加到我的CFM文件中并将<xsl:param name="actorID"/>添加到我的XSL文件中来解决了该问题。

+0

修改删除不必要的#号 – Leigh 2013-03-16 16:32:11

0

要获得关于URL变量的问题。网址是CF的可变范围之一,可以像访问:

<cfset myvar = #URL.actorid# > 

当然,你不必使用右边的#迹象,但因为你刚开始学习它确定一个好办法你CF变量。

这里是一个链接到CF 9文件和CF的内置variable scopes

+0

因此,我可以将 myvar =#URL.movi​​eID#>?由于我使用的是xslParam,我不太清楚如何使用这个代码而不是原来的代码 – Alex 2013-03-16 01:31:18

+1

@Alex你仍然想使用''' ##'没有必要。这个答案没有多大帮助。 – 2013-03-16 03:20:32

+0

@Alex - 最好从右脚开始。不要用那种方式使用#号。他们完全没有必要。虽然它不会导致语法错误,但通常认为它编码不佳,甚至Adobe也会[阻止使用无关的#号](http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7fc3。 HTML)。如果你是CF的新手,你可能会发现这个链接很有用:[由英镑符号决定](http://www.coldfusionmuse。com/index.cfm/2011/2/10/when.do.i.use.pound.signs) – Leigh 2013-03-16 03:20:43