我有一个存储电影及其演员的 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 个“演员”子元素。每个“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 个演员的名字都根据他们对应的“演员 ID”超链接到 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 的演员。
因此,当我单击 Bob (actorID="1") 时,它会将我带到特定的 actorID 详细信息页面。但它不仅显示 Bob 信息(姓名和年龄),还显示 Mike 信息。
这是因为 Mike 的详细信息也与“actorID="1" 相关,只是它位于另一个电影元素中。我的程序无法区分位于不同 MovieID 中的相同 ActorID 之间的区别。它只显示所有相关信息到那个特定的 ID。所以无论我点击 Bob 还是 Mike(两者的 actorID="1"),页面都会显示 Bob 和 Mike 的信息(他们的姓名和年龄)。
这是 actor_details 页面显示的内容:
这就是我希望 actor_details 页面显示的内容:
因此,即使 Bob 和 Mike 具有相同的 ActorID,它们与不同的 MovieID 相关,因此,我想分别显示它们的信息。