[xslt] Непонятка с xsl:key
От: Аноним  
Дата: 30.01.12 13:57
Оценка:
Есть преобразование


<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" extension-element-prefixes="msxsl">
  <xsl:output method="text" indent="no" encoding="UTF-8"/>

  <xsl:key name="srcKeys" match="item[@src]" use="@src"/>

  <xsl:template match="/top">
    <xsl:for-each select="//items">
      <xsl:variable name="itemsName" select="@name"/>
      <xsl:value-of select="$itemsName"/>:<xsl:call-template name="ComplexTemplate"/>
      <xsl:text> </xsl:text>
    </xsl:for-each>
  </xsl:template>

  <xsl:template name="ComplexTemplate">
    <xsl:for-each select=".//item[@src and generate-id()= generate-id(key('srcKeys', @src))]">
      <xsl:value-of select="@src"/>
    </xsl:for-each>
  </xsl:template>

</xsl:stylesheet>


и входной xml:


<?xml version="1.0" encoding="utf-8"?>
<top>
  <items name="item1">
    <item src="1" value="1"/>
    <item value="zzz"/>
    <item src="1" value="2"/>
    <item src="2" value="3"/>
    <item src="3" value="4"/>
    <item value="aaaa"/>
    <item src="3" value="5"/>
    <group>
      <item src="1" value="6"/>
      <item src="1" value="7"/>
      <item value="uuuu"/>
      <item src="2" value="8"/>
      <item src="3" value="9"/>
      <item src="3" value="10"/>
    </group>
  </items>
  <items name="item2">
    <item value="ignore"/>
    <item src="3" value="14"/>
    <item src="3" value="15"/>
    <group>
      <item value="ignore2"/>
      <item src="2" value="18"/>
      <group>
        <item src="3" value="19"/>
        <item value="ignore3"/>
        <item src="3" value="20"/>
      </group>
    </group>
  </items>
</top>


Хочу на выходе получить: item1:123 item2:32 (уникальные значения src в каждом items)

а получаю: item1:123 item2:

что не так?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.