Xml 如何在xslt中用键替换节点的名称

Xml 如何在xslt中用键替换节点的名称,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我需要使用一个键来找到对应的节点到不同级别的不同节点。我不明白如何用密钥替换节点名而不出错 <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" m

我需要使用一个键来找到对应的节点到不同级别的不同节点。我不明白如何用密钥替换节点名而不出错

    <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>

(
)

如果没有更多信息,例如您试图实现的目标,甚至错误消息实际上是什么,我猜您的问题在于这一行

<xsl:value-of select = "//(key('profbyid', 'num[@refinstid]'))/name" />

因此,它获取num元素的refinstid属性的值,并使用键查找匹配的prof节点,然后返回其名称

,您试图做什么?有任何输入/输出XML吗?您能否包含XSLT的其余部分以使其有效?
<xsl:value-of select = "key('profbyid', num/@refinstid)/name" />