Выбрать / вывести уникальные значения - PullRequest
0 голосов
/ 07 ноября 2010

Мне нужно перебрать XML-документ (без проблем там) и проверить, находится ли найденное мной значение уже в теге (a) в div в моем XSL-документе, который я генерирую, только если значение не в том (а) теге, я должен создать новый (а) тег для него и вставить в 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>

1004 *

извините за ранее, я пытаюсь сделать следующее: в операторе if проверить, существует ли текущее значение в div, если нет, добавить его, если есть, ничего не делать ...

10x снова

1 Ответ

3 голосов
/ 08 ноября 2010

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

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

<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 / node / node / data / genres / value. Затем он просматривает все записи, но печатает только первые записи каждого типа. Конечным результатом является то, что каждое значение будет выводиться только один раз.

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