2013-10-27 46 views
0

你能告訴我爲什麼它不起作用嗎? IM在XSL新手....XSL比較ID

的xsl:

<ol id="presents"> 
<xsl:for-each select="tns:meeting/tns:jobs/tns:ausents/tns:ausent-member"> 
<li id="ausent"><a HREF="#jobs"><b><xsl:value-of select="tns:meeting/tns:members/tns:member[@member_id = current()/@member_id]/@name"/></b></a></li> 
</xsl:for-each> 
</ol> 

XML示例:

<tns:meeting data="2001-01-01" local="Porto" organization="FCUP" type="ordinária" xmlns:tns="http://www.example.org/meeting" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/meeting meeting.xsd "> 
    <tns:members> 
     <tns:member name="João" member_id="i1" title="account manager"></tns:member> 
     <tns:member name="Carlos" member_id="i2" title="director geral"></tns:member> 
     <tns:member name="José" member_id="i3" title="colaborador"></tns:member> 
     <tns:member name="Joana" member_id="i4" title="secretária"></tns:member> 
     <tns:member name="Carolina" member_id="i5" title="tesoureira"></tns:member> 
     <tns:member name="Pedro" member_id="i6" title="colaborador"></tns:member> 
     <tns:member name="Ivo" member_id="i7" title="presidente AE"></tns:member> 
     <tns:member name="Luis" member_id="i8" title="vice-presidente AE"></tns:member> 
    </tns:members> 
<tns:jobs> <!-- Possibilidade de colocar o atributo nome no trabalho --> 
     <tns:ausents> 
      <tns:ausent-member member_id="i1"> 
       <tns:justification>Problemas pessoais</tns:justification> 
      </tns:ausent-member> 
      <tns:ausent-member member_id="i2"> 
       <tns:justification>Problemas pessoais</tns:justification> 
      </tns:ausent-member> 
     </tns:ausents> 

步驟

「的tns:會議/ TNS:成員/ TNS :member [@member_id = current()/ @ member_id]「>」

是不工作,我無法找到問題....

+0

你確定你有' />'?因爲這是一個語法錯誤。 – Tomalak

+1

我的錯誤複製。對不起;)我沒有那樣.. – cpfp

回答

3

正是由於這種表達...

<xsl:value-of select="tns:meeting/tns:members/tns:member[@member_id = current()/@member_id]/@name"> 

在這一點上,你是在的xsl:for - 每個,定位於tns:認可會員元素,但是您的xsl:值是一個相對錶達式。它與您所在的元素相關,因此正在尋找名爲tns:meeting的子元素。

你需要使它成爲一個絕對的表達

<xsl:value-of select="/tns:meeting/tns:members/tns:member[@member_id = current()/@member_id]/@name"> 

在一開始的斜線意味着它會在文檔節點,這是你想要的開始。

然而,查找這樣的元素時,它有時是更好地界定一個關鍵

<xsl:key name="member" match="tns:member" use="@member_id" /> 

然後你可以看一下,像這樣的元素:

<xsl:value-of select="key('member', @member_id)/@name"/> 

試試這個XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tns="http://www.example.org/meeting"> 
    <xsl:output omit-xml-declaration="yes" indent="yes" /> 
    <xsl:key name="member" match="tns:member" use="@member_id" /> 

    <xsl:template match="/"> 
    <ol id="presents"> 
     <xsl:for-each select="tns:meeting/tns:jobs/tns:ausents/tns:ausent-member"> 
      <li id="ausent"><a HREF="#jobs"><b> 
        <xsl:value-of select="key('member', @member_id)/@name"/> 
      </b></a></li> 
     </xsl:for-each> 
    </ol> 
    </xsl:template> 
</xsl:stylesheet> 
+0

perfecto我的朋友 – cpfp

2

那麼tns:memberstns:jobs是兄弟姐妹。該xsl:for-each select="tns:meeting/tns:jobs/tns:ausents/tns:ausent-member"裏面的上下文節點是一個tns:ausent-member所以你需要去到

<xsl:value-of select="ancestor::tns:meeting/tns:members/tns:member[@member_id = current()/@member_id]/@name"> 
+0

不錯,非常感謝! – cpfp