0

なぜうまくいかないのか教えていただけますか?xslの初心者です....

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>

例:

<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:meeting/tns:members/tns:member[@member_id = current()/@member_id]">"

動作しておらず、問題が見つかりません....

4

2 に答える 2

3

この表現だから…

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

この時点で、tns:ausent-member要素に配置された xsl:for-each にいますが、xsl:value-ofは相対式です。これは、あなたが配置されている要素に関連しているため、 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>
于 2013-10-27T15:28:32.280 に答える
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"> 
于 2013-10-27T15:25:16.333 に答える