我有一个存储电影及其演员的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