2013-10-27 39 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