我需要使用密钥来查找不同级别的不同节点的相应节点。我不明白如何用键替换节点名称而不会出现错误。
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name = "coursesbygrade" match = "course" use = "grade" />
<xsl:key name = "profbyid" match = "prof" use = "@instid" />
<xsl:output method = "html" />
<xsl:template match = "/">
<html>
<head><link rel = "stylesheet" type = "text/css" href = "./courses.css" /></head>
<body>
<div class = 'container'>
<table>
<xsl:for-each select = "//course[generate-id(.) = generate-id(key('coursesbygrade', grade)[1])]">
<xsl:sort select = "grade" />
<tr>
<td><xsl:value-of select = "grade" /></td>
<td>
<xsl:for-each select = "key('coursesbygrade', grade)">
<xsl:value-of select = "dept" />
<xsl:text> </xsl:text>
<xsl:value-of select = "num" />
<xsl:text> (</xsl:text>
<xsl:value-of select = "//(key('profbyid', 'num[@refinstid]'))/name" />
<xsl:text>)</xsl:text>
答案 0 :(得分:0)
如果没有更多信息,例如您要实现的目标,甚至错误信息实际上是什么,我猜您的问题就在于此行
<xsl:value-of select = "//(key('profbyid', 'num[@refinstid]'))/name" />
您不需要在这里使用//
作为开始,因为该键返回实际节点,因此您不必在层次结构中“搜索”它。此外,您在键的第二个参数周围有撇号,这意味着它将查找字符串文字。我猜你真的想用节点(或属性)的值进行搜索。
这可能(可能)是您需要的陈述
<xsl:value-of select = "key('profbyid', num/@refinstid)/name" />
因此,它获取 num 元素的 refinstid 属性的值,并使用键查找匹配的 prof 节点,然后返回名称。