2013-10-27 2 views
0

왜 작동하지 않는지 말할 수 있습니까?XSL 비교 ID

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

XSL을 XSL에서 초보자 임 회의/TNS : 회원/TNS를 : member [@member_id = current()/@ member_id] ">"

가 작동하지 않고 문제가 찾을 수 없습니다 ....

+0

' />'이 (가) 있습니까? 이는 구문 오류 때문입니다. – Tomalak

+1

내 오류 복사 중. 미안;) 나는 그것을 좋아하지 않는다. .. – cpfp

답변

3

이 때문에이 표현입니다까지 갈 필요가있다 : 대한 각각 tns : ausent-member 요소에 있지만, xsl : value-of은 상대적 표현식입니다. 그것은 당신이 게시 된 요소와 관련이 있기 때문에 tns : meeting이라는 하위 요소를 찾고 있습니다.

당신은 그것을 시작할 때 슬래시는 당신이 원하는 문서 노드에서 시작을 의미 절대 표현

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

를 확인해야합니다.

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

이 XSLT를보십시오 :이 방법의 요소를 찾을 때 그러나

는, 당신이 이렇게 같은 요소를 찾아 볼 수 있습니다 그런 다음 키

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

을 정의하기 위해 때로는 더 :

<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" 내부 문맥 노드

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

, 당신은 XSL에 ... tns:ausent-member 그래서 당신이

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

nice, thanks a lot! – cpfp