XSLT: цикл Foreach повторяется для каждого элемента, но отображает значение первого элемента? - PullRequest
1 голос
/ 10 мая 2009

У меня есть список предметов, и для каждого предмета я хочу сделать его URL.

Список:

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

Выход:

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

Что я делаю не так?

Ответы [ 2 ]

5 голосов
/ 10 мая 2009

Более правильный способ XSLT - добавить шаблон «tag» и изменить свой оригинал:

<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>
4 голосов
/ 10 мая 2009

То, что вы делаете с выражением «значение-значение», - это выбор всех узлов тега в документе xml:

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

В результате этого будет использоваться только первый выбранный узел.

Вместо этого вы можете использовать следующее:

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

Где выберите = "." выберет текущий узел для каждого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...