2009-05-09 5 views
1

Ich habe eine Artikelliste und für jeden Artikel möchte ich eine URL machen.XSLT: Foreach iteriert für jedes Element, zeigt aber den Wert des ersten Elements an?

Liste:

<root> 
    <tags> 
    <tag>open source</tag> 
    <tag>open</tag> 
    <tag>advertisement</tag> 
    <tag>ad</tag> 
    </tags> 
</root> 

XSLT:

<xsl:template match="*"> 
    <div class="tags"> 
     <xsl:for-each select="/post/tags/tag"> 
      <a href="#"> 
      <xsl:value-of select="//tag"/> 
      </a> 
     </xsl:for-each> 
    </div> 
</xsl:template> 

Ausgang:

<div class="tags"> 
    <a href="#">open source</a> 
    <a href="#">open source</a> 
    <a href="#">open source</a> 
    <a href="#">open source</a> 
    </div> 

Was mache ich falsch?

Antwort

4

Was Sie mit dem Wert-of tun Ausdruck alle Tag Knoten im XML-Dokument auswählen:

<xsl:value-of select="//tag"/> 

Der Effekt davon ist, dass nur der erste ausgewählte Knoten wird für den Wert verwendet werden .

können Sie die stattdessen folgende verwenden: ""

<xsl:value-of select="."/> 

Wo select = wählt den aktuellen Knoten aus dem for-each aus.

+0

Thank you! Ich versuchte zuerst und es tat nichts ... – Four

+0

Vielen Dank für die Nachricht - entfernte die falsche Verwendung. – Oded

5

Eine XSLT Weise die richtige Sache zu tun, ist eine "Tag" Vorlage hinzufügen und das Original ändern:

<xsl:template match="*"> 
    <div class="tags"> 
     <xsl:apply-templates select="tag" /> 
    </div> 
</xsl:template> 

<xsl:template match="tag"> 
     <a href="#"> 
     <xsl:value-of select="."/> 
     </a> 
</xsl:template> 
Verwandte Themen