2010-11-07 2 views
-1

Мне нужно пройти через XML-документ (там нет проблем) и проверить, находится ли значение, которое я нахожу, в теге (a) в div в моем документе XSL, который я генерирую, только если значение не находится в этом (a) теге, я должен создать для него новый (а) тег и вставить в div, который я проверяю ... Кто-нибудь знает, как это сделать динамически в XSLT?Уникальные значения выбора/вывода

<div id="tags"><span class="l_cap">&#160;</span> 
<a href="#" class="current">all</a> 
<xsl:for-each select="root/nodes/node/data/genres"> 
    <xsl:for-each select="value"> 
    **<xsl:if test="not(contains())">** 
     <a href="#"><xsl:value-of select="current()"/></a> 
    </xsl:if> 
    </xsl:for-each> 
</xsl:for-each> 

 

жаль перед тем, что я пытаюсь сделать, это: в, если заявление, проверьте, если текущее значение уже существует в DIV, если нет, то добавьте его, если есть, дон «т сделать что-нибудь ...

10x снова

ответ

3

Похоже, вы пытаетесь создать четкий список всех„жанров“в вашем списке.

Предполагая структуру данных, которая выглядит как это:

<root> 
<nodes> 
    <node> 
     <data> 
      <genres> 
       <value>One</value> 
       <value>Two</value> 
       <value>Two</value> 
       <value>Three</value> 
       <value>Two</value> 
      </genres> 
     </data> 
    </node> 
</nodes> 
</root> 

И таблицу стилей, которая выглядит как это:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:key name="genres" match="value" use="."/> 

<xsl:template match="/"> 
    <div> 
     <xsl:for-each select="/root/nodes/node/data/genres/value"> 
      <xsl:if test="generate-id(.) = generate-id(key('genres', .)[1])"> 
       <a href="#"><xsl:value-of select="."/></a> 
      </xsl:if> 
     </xsl:for-each> 
    </div> 
</xsl:template> 
</xsl:stylesheet> 

Тогда вы будете в конечном итоге с чем-то вроде этого:

<div> 
<a href="#">One</a> 
<a href="#">Two</a> 
<a href="#">Three</a> 
</div> 

Это довольно стандартная технология XSLT 1.0. Он использует ключи (описанные здесь: http://www.xml.com/pub/a/2002/02/06/key-lookups.html), чтобы создать своего рода индекс всех записей/root/nodes/node/data/genres/value. Затем он перебирает все записи, но только печатает первый из каждого типа. Конечным результатом является то, что каждое значение будет выводиться только один раз.

+0

10x, я сделал это с JS, но это намного лучше, 10x :-) – Erez

+0

+1 Для перевода. – 2010-11-08 16:05:54

Смежные вопросы