我有一個存儲電影及其演員的XML文件。根據其唯一ID顯示XML子元素信息
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="index.xsl"?>
<movies
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="movies.xsd">
<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>
</movies>
從上面的代碼可以看出,我有2個「電影」元素包含3個「actor」子元素。每個「movieID」是唯一的,並且每個「actorID」在其相應的「movieID」父元素內是唯一的。
這是我的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?actorID=<xsl:value-of select="../@actorID"/></xsl:attribute>
<xsl:value-of select="." />
</xsl:element>
<xsl:element name="br" />
</xsl:template>
所有6名演員的名字是超鏈接的基於其相應的‘actorId來’到actor_details.cfm頁。
這是我的actor_details.cfm代碼:
<cfset MyXmlFile = Expandpath("movies.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["actorID"] = "#url.actorID#" >
<cfset xmlOutput = XMLTransform(xmlInput, xslInput, xslParam)>
<!--- data is output --->
<cfcontent type="text/html" reset="yes">
<cfoutput>#xmloutput#</cfoutput>
這是我actor_details.xsl代碼
<xsl:param name="actorID">1</xsl:param>
<xsl:template match="/">
<title>Actor details</title>
<xsl:apply-templates select="/movies/movie/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>
當我點擊頁面上顯示的任何6名演員的名字,它將我帶到顯示演員的「姓名和年齡」的特定actor_details頁面。 我唯一的問題是有兩個ID 1的演員,兩個ID 2的演員和兩個ID 3的演員位於兩部電影中。
所以,當我點擊鮑勃(actorId來=「1」),它帶我到那個特定的actorId詳細信息頁面。但不僅僅顯示Bob的信息(姓名和年齡) ,還顯示Mike的信息。
原因是因爲Mike的細節也與「actorID =」1「有關,只不過 它位於另一個電影元素中,我的程序無法區分位於單獨MovieID中的相同ActorID的區別。顯示所有與該特定ID的信息。 所以不管我是否點擊鮑勃和邁克(兩人都的actorId =「1」),該頁面顯示的信息,鮑勃和邁克(他們的姓名和年齡)。
這是actor_details頁面顯示的內容:
這就是我想要的actor_details頁面顯示:
因此,即使鮑勃和邁克有同樣的actorId的,它們都涉及到不同的MovieID的,因此,我想顯示他們的信息分別。
第一個選項看起來像是一個更好的解決方案,但由於某種原因,當我單擊actor的名稱時,ColdFusion會報告一個意外錯誤。這與我的actor_details.cfm文件代碼有關嗎? –
Alex
2013-03-15 20:55:39
對不起,我從來沒有使用ColdFusion :)。你有沒有試圖添加另一行到該文件,就像你已經有的那個? '' –
AJPerez
2013-03-16 05:48:45
我已經通過向我的CFM文件添加 xsl:param name =「actorID」/>添加到我的XSL文件中。所以現在一切正常。你的解決方案對我非常有幫助。非常感謝! –
Alex
2013-03-16 13:11:56