2013-12-02 7 views
-3

Мне нужно использовать ключ, чтобы найти соответствующий узел для другого узла с другого уровня. Я не понимаю, как заменить имя узла ключом, не получив ошибку.Как заменить имя узла ключом в xslt

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

Что вы пытаетесь сделать? Есть ли какой-либо входной/выходной XML? Можете ли вы включить остальную часть своего XSLT, чтобы она была действительной? –

ответ

0

Без дополнительной информации, например, что вы пытаетесь достичь, или даже то, что сообщение об ошибке на самом деле, я думаю ваш вопрос с этой линией

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

Вам не нужно для использования // здесь для начала, так как ключ возвращает фактический узел, поэтому вам не нужно «искать» его в иерархии. Кроме того, у вас есть апострофы вокруг второго параметра в ключе, что означает, что он будет искать строковый литерал. Я предполагаю, что вы действительно хотите искать, используя значение узла (или атрибута).

Это (вероятно) утверждение вам нужно

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

Таким образом, он получает значение refinstid атрибут Num элемента, и отыскивает соответствующий проф узла с помощью и затем возвращает свое имя .

Смежные вопросы