nochmal xsl:key und Gruppierung
JO
- xsl
0 Thomas Meinike0 JO
Hallo,
bezugnehmend auf die unten angeführte XML, will ich alle Titel gruppieren, die dasselbe Keyword besitzen.
Die Ausgabe der Transformation ist folgende:
Keyword a,
Title 1
Title 3
Keyword b,
Title 2
Allerdings sollte sie aber so aussehen (oben fehlt nämlich aus irgend einem Grund das Keyword c und der zugehörige Title 3):
Keyword a,
Title 1
Title 3
Keyword b,
Title 2
Keyword c,
Title 3
Sieht jemand vielleicht woran das liegt?
<?xml version="1.0" encoding="ISO-8859-1" ?>
<RESPONSE SESSION_ID="ip171871028299926" TYPE="lookup">
<LOOKUP ORIGXML="17225_orig.xml" NEXTREF="6" PREVREF="0">
<HIT>
<MOL>
<REFS>
<REF NO="1" CURRENT="true">
<TITLE>Title 1</TITLE>
<KEYWORDS>
<KEYWORD>Keyword a</KEYWORD>
</KEYWORDS>
</REF>
<REF NO="2" CURRENT="true">
<TITLE>Title 2</TITLE>
<KEYWORDS>
<KEYWORD>Keyword b</KEYWORD>
</KEYWORDS>
</REF>
<REF NO="3" CURRENT="true">
<TITLE>Title 3</TITLE>
<KEYWORDS>
<KEYWORD>Keyword c</KEYWORD>
<KEYWORD>Keyword a</KEYWORD>
</KEYWORDS>
</REF>
</REFS>
</MOL>
</HIT>
</LOOKUP>
</RESPONSE>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:key name="REF-by-KEYWORD" match="REF" use="KEYWORDS/KEYWORD"/>
<xsl:template match="/RESPONSE/LOOKUP/HIT/MOL/REFS">
<xsl:for-each select="REF[count(. | key('REF-by-KEYWORD', KEYWORDS/KEYWORD)[1]) = 1]">
<xsl:value-of select="KEYWORDS/KEYWORD"/>,<br/>
<xsl:for-each select="key('REF-by-KEYWORD', KEYWORDS/KEYWORD)">
 <xsl:value-of select="TITLE"/><br/>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Hallo,
Allerdings sollte sie aber so aussehen (oben fehlt nämlich aus irgend einem Grund das Keyword c und der zugehörige Title 3):
Keyword a,
Title 1
Title 3
Keyword b,
Title 2
Keyword c,
Title 3
Sieht jemand vielleicht woran das liegt?
Probiere es so:
<xsl:for-each select="REF[count(. | key('REF-by-KEYWORD', KEYWORDS/KEYWORD)[1+position()]) = 1]">
<xsl:value-of select="KEYWORDS/KEYWORD"/>,<br/>
<xsl:for-each select="key('REF-by-KEYWORD', KEYWORDS/KEYWORD[1])">
 <xsl:value-of select="TITLE"/><br/>
</xsl:for-each>
</xsl:for-each>
MfG, Thomas
Danke für die Antwort. Aber wenn man im Title 3 die KEYWORD-Tags vertauscht, also zuerst a und dann c, dann erscheint im Ergebnis das Keyword c nicht mehr, und dafür Keyword a doppelt.