AussieSilver
asked on
counting the distincit nodes xslt
Hi there,
I have a small issue with my xslt code. The code worked properly before I started adding the element <total> which counts the total distinct element <search> in wordlist.xml.
Please have a look at the xslt <total> element and help me to crack it..
Cheers,
I have a small issue with my xslt code. The code worked properly before I started adding the element <total> which counts the total distinct element <search> in wordlist.xml.
Please have a look at the xslt <total> element and help me to crack it..
Cheers,
-------------xslt
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="search" match="wordEntry" use="search"/>
<xsl:template match="wordlist">
<Dictionary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="translation.xsd">
<from><xsl:value-of select="@from" /></from>
<to><xsl:value-of select="@to" /></to>
<total>
<xsl:value-of select="wordEntry[generate-id() = generate-id(key('wordEntry', search)[1])]"/>
</total>
<xsl:apply-templates select="wordEntry[generate-id() = generate-id(key('search', search)[1])]"/>
</Dictionary>
</xsl:template>
<xsl:template match="wordEntry">
<translation initial="{substring(search ,1,1)}">
<xsl:copy-of select="search"/>
<counter>
<xsl:value-of select="count(key('search', search))"/>
</counter>
<xsl:copy-of select="key('search', search)/replace"/>
</translation>
</xsl:template>
</xsl:stylesheet>
------ source wordlist.xml
<?xml version="1.0" encoding="UTF-8"?>
<wordlist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="wordlist.xsd"
from="en"
to="es">
<wordEntry>
<search>A Clockwork Orange</search>
<replace>La naranja mecánica</replace>
</wordEntry>
<wordEntry>
<search>A Few Good Men</search>
<replace>A Few Good Men</replace>
</wordEntry>
<wordEntry>
<search>A Star Is Born</search>
<replace>Ha nacido una estrella</replace>
</wordEntry>
<wordEntry>
<search>Ab Urbe condita</search>
<replace>Ab Urbe condita libri</replace>
</wordEntry>
<wordEntry>
<search>Ab urbe condita</search>
<replace>Ab urbe condita</replace>
</wordEntry>
<wordEntry>
<search>Ab urbe condita</search>
<replace>Ab urbe condita</replace>
</wordEntry>
<wordEntry>
<search>Abel</search>
<replace>Abel</replace>
</wordEntry>
<wordEntry>
<search>Abel</search>
<replace>Caín</replace>
</wordEntry>
<wordEntry>
<search>Abel</search>
<replace>Abel</replace>
</wordEntry>
<wordEntry>
<search>Abel</search>
<replace>Caín</replace>
</wordEntry>
<wordEntry>
<search>Alyosha Karamazov</search>
<replace>Los hermanos Karamazov</replace>
</wordEntry>
<wordEntry>
<search>And Then There Were None</search>
<replace>Diez negritos</replace>
</wordEntry>
<wordEntry>
<search>Angst</search>
<replace>Gaslight</replace>
</wordEntry>
<wordEntry>
<search>Gaslight</search>
<replace>Gaslight</replace>
</wordEntry>
<wordEntry>
<search>Around The World In 80 Days</search>
<replace>La vuelta al mundo en ochenta días</replace>
</wordEntry>
<wordEntry>
<search>Around the World in Eighty Days</search>
<replace>La vuelta al mundo en ochenta días</replace>
</wordEntry>
<wordEntry>
<search>Batman & Robin</search>
<replace>Batman y Robin</replace>
</wordEntry>
<wordEntry>
<search>Bomarzo</search>
<replace>Bomarzo</replace>
</wordEntry>
<wordEntry>
<search>Brave New World</search>
<replace>Un mundo feliz</replace>
</wordEntry>
<wordEntry>
<search>Casino Royale</search>
<replace>Casino Royale</replace>
</wordEntry>
<wordEntry>
<search>Cheaper by the Dozen</search>
<replace>Más barato por docena</replace>
</wordEntry>
<wordEntry>
<search>Cinderella</search>
<replace>La Cenicienta</replace>
</wordEntry>
<wordEntry>
<search>Da Vinci Code</search>
<replace>El código Da Vinci</replace>
</wordEntry>
<wordEntry>
<search>Dawn of the Dead</search>
<replace>El amanecer de los muertos</replace>
</wordEntry>
<wordEntry>
<search>Diary of a Chambermaid</search>
<replace>Diario de una camarera</replace>
</wordEntry>
<wordEntry>
<search>Dune</search>
<replace>Dune</replace>
</wordEntry>
<wordEntry>
<search>Evil Dead</search>
<replace>Posesión infernal</replace>
</wordEntry>
<wordEntry>
<search>Frankenstein</search>
<replace>Frankenstein</replace>
</wordEntry>
<wordEntry>
<search>Fyodor Karamazov</search>
<replace>Los hermanos Karamazov</replace>
</wordEntry>
<wordEntry>
<search>General San Martín Park</search>
<replace>Parque General San Martín</replace>
</wordEntry>
<wordEntry>
<search>Gentlemen Prefer Blondes</search>
<replace>Los caballeros las prefieren rubias</replace>
</wordEntry>
<wordEntry>
<search>Goldfinger</search>
<replace>Goldfinger</replace>
</wordEntry>
<wordEntry>
<search>Haitian Creole</search>
<replace>Criollo haitiano</replace>
</wordEntry>
<wordEntry>
<search>Haitian language</search>
<replace>Criollo haitiano</replace>
</wordEntry>
<wordEntry>
<search>Hamlet</search>
<replace>Hamlet</replace>
</wordEntry>
<wordEntry>
<search>House of Wax</search>
<replace>La casa de cera</replace>
</wordEntry>
<wordEntry>
<search>I, Robot</search>
<replace>Yo, Robot</replace>
</wordEntry>
<wordEntry>
<search>Il Gattopardo</search>
<replace>El gatopardo</replace>
</wordEntry>
<wordEntry>
<search>In Cold Blood</search>
<replace>A sangre fría</replace>
</wordEntry>
<wordEntry>
<search>Interview with the Vampire</search>
<replace>Entrevista con el Vampiro</replace>
</wordEntry>
<wordEntry>
<search>Ivan Karamazov</search>
<replace>Los hermanos Karamazov</replace>
</wordEntry>
<wordEntry>
<search>John Robert Schrieffer</search>
<replace>John Robert Schrieffer</replace>
</wordEntry>
<wordEntry>
<search>J Robert Schrieffer</search>
<replace>John Robert Schrieffer</replace>
</wordEntry>
<wordEntry>
<search>Joseph K</search>
<replace>El proceso</replace>
</wordEntry>
<wordEntry>
<search>Journey to the Center of the Earth</search>
<replace>Viaje al centro de la Tierra</replace>
</wordEntry>
<wordEntry>
<search>La Boheme</search>
<replace>La Bohème</replace>
</wordEntry>
<wordEntry>
<search>La Boheme</search>
<replace>La Bohème</replace>
</wordEntry>
<wordEntry>
<search>La bohème</search>
<replace>La Bohème</replace>
</wordEntry>
<wordEntry>
<search>La bohème</search>
<replace>La Bohème</replace>
</wordEntry>
<wordEntry>
<search>Les Miserables</search>
<replace>Los miserables</replace>
</wordEntry>
<wordEntry>
<search>Les Misérables</search>
<replace>Los miserables</replace>
</wordEntry>
<wordEntry>
<search>Librarians in the Name of the Rose</search>
<replace>El nombre de la rosa</replace>
</wordEntry>
<wordEntry>
<search>Lolita</search>
<replace>Lolita</replace>
</wordEntry>
<wordEntry>
<search>Lord of the Flies</search>
<replace>El señor de las moscas</replace>
</wordEntry>
<wordEntry>
<search>Lord of the Flies in popular culture</search>
<replace>El señor de las moscas</replace>
</wordEntry>
<wordEntry>
<search>M</search>
<replace>M, el vampiro de Düsseldorf</replace>
</wordEntry>
<wordEntry>
<search>Macbeth</search>
<replace>Macbeth</replace>
</wordEntry>
<wordEntry>
<search>Madame Bovary</search>
<replace>Madame Bovary</replace>
</wordEntry>
<wordEntry>
<search>Materialism</search>
<replace>Materialismo</replace>
</wordEntry>
<wordEntry>
<search>Materialism</search>
<replace>Materialismo</replace>
</wordEntry>
<wordEntry>
<search>Materialist</search>
<replace>Materialismo</replace>
</wordEntry>
<wordEntry>
<search>Materialist</search>
<replace>Materialismo</replace>
</wordEntry>
<wordEntry>
<search>Mathematica</search>
<replace>Mathematica</replace>
</wordEntry>
<wordEntry>
<search>Midsummer Night's Dream</search>
<replace>El sueño de una noche de verano</replace>
</wordEntry>
<wordEntry>
<search>Midsummer Night's Dream</search>
<replace>El sueño de una noche de verano</replace>
</wordEntry>
<wordEntry>
<search>Mountaineering</search>
<replace>Montañismo</replace>
</wordEntry>
<wordEntry>
<search>Mountain climbing</search>
<replace>Montañismo</replace>
</wordEntry>
<wordEntry>
<search>Alpinism</search>
<replace>Montañismo</replace>
</wordEntry>
<wordEntry>
<search>Murder on the Orient Express</search>
<replace>Asesinato en el Orient Express</replace>
</wordEntry>
<wordEntry>
<search>Musketeers</search>
<replace>Los tres mosqueteros</replace>
</wordEntry>
<wordEntry>
<search>Myocardial infarction</search>
<replace>Infarto</replace>
</wordEntry>
<wordEntry>
<search>Myocardial infarction</search>
<replace>Infarto de miocardio</replace>
</wordEntry>
<wordEntry>
<search>Name of the Rose</search>
<replace>El nombre de la rosa</replace>
</wordEntry>
<wordEntry>
<search>Neverending Story</search>
<replace>La historia interminable</replace>
</wordEntry>
<wordEntry>
<search>Night Watch</search>
<replace>La ronda de noche</replace>
</wordEntry>
<wordEntry>
<search>Night Watch painting</search>
<replace>La ronda de noche</replace>
</wordEntry>
<wordEntry>
<search>Night of the Living Dead</search>
<replace>La noche de los muertos vivientes</replace>
</wordEntry>
<wordEntry>
<search>Nineteen Eighty-Four</search>
<replace>Mil novecientos ochenta y cuatro</replace>
</wordEntry>
<wordEntry>
<search>Northern Savonia</search>
<replace>Savonia del Norte</replace>
</wordEntry>
<wordEntry>
<search>Oath of the Horatii</search>
<replace>Juramento de los Horacios</replace>
</wordEntry>
<wordEntry>
<search>Oath of the Horatii</search>
<replace>Juramento de los Horacios</replace>
</wordEntry>
<wordEntry>
<search>Ocean's Eleven</search>
<replace>Cuadrilla de los once</replace>
</wordEntry>
<wordEntry>
<search>Ocean's Eleven</search>
<replace>Ocean's Eleven</replace>
</wordEntry>
<wordEntry>
<search>Oliver Twist</search>
<replace>Oliver Twist</replace>
</wordEntry>
<wordEntry>
<search>On Her Majesty's Secret Service</search>
<replace>al servicio secreto de su majestad</replace>
</wordEntry>
<wordEntry>
<search>Parque Central Complex</search>
<replace>Torres de Parque Central</replace>
</wordEntry>
<wordEntry>
<search>Parque Central Complex</search>
<replace>Torres de Parque Central Caracas</replace>
</wordEntry>
<wordEntry>
<search>Parque San Martin</search>
<replace>Parque General San Martín</replace>
</wordEntry>
<wordEntry>
<search>Parque San Martin</search>
<replace>Parque General San Martín Mendoza</replace>
</wordEntry>
<wordEntry>
<search>Persimmon</search>
<replace>Diospyros kaki</replace>
</wordEntry>
<wordEntry>
<search>Persimmon</search>
<replace>Diospyros kaki</replace>
</wordEntry>
<wordEntry>
<search>Persimmons</search>
<replace>Diospyros kaki</replace>
</wordEntry>
<wordEntry>
<search>Persimmons</search>
<replace>Diospyros kaki</replace>
</wordEntry>
<wordEntry>
<search>Peter Pan</search>
<replace>Peter Pan</replace>
</wordEntry>
<wordEntry>
<search>Phantom of the Opera</search>
<replace>El Fantasma de la Ópera</replace>
</wordEntry>
<wordEntry>
<search>Planet of the Apes</search>
<replace>El planeta de los simios</replace>
</wordEntry>
<wordEntry>
<search>Pride and Prejudice</search>
<replace>Orgullo y prejuicio</replace>
</wordEntry>
<wordEntry>
<search>Quality control</search>
<replace>Control de calidad</replace>
</wordEntry>
<wordEntry>
<search>Quality control</search>
<replace>Control de calidad</replace>
</wordEntry>
<wordEntry>
<search>Quebec city</search>
<replace>Ciudad de Quebec</replace>
</wordEntry>
<wordEntry>
<search>Quebec city</search>
<replace>Ciudad de Quebec</replace>
</wordEntry>
<wordEntry>
<search>Quebec city</search>
<replace>Ciudad de Quebec</replace>
</wordEntry>
<wordEntry>
<search>Quirinal</search>
<replace>Quirinal</replace>
</wordEntry>
<wordEntry>
<search>Quirinale</search>
<replace>Quirinal</replace>
</wordEntry>
<wordEntry>
<search>Quirinale</search>
<replace>Quirinal</replace>
</wordEntry>
<wordEntry>
<search>Québec City</search>
<replace>Ciudad de Quebec</replace>
</wordEntry>
<wordEntry>
<search>Québec City</search>
<replace>Ciudad de Quebec</replace>
</wordEntry>
<wordEntry>
<search>Québec City</search>
<replace>Ciudad de Quebec</replace>
</wordEntry>
<wordEntry>
<search>Québec City</search>
<replace>Ciudad de Quebec</replace>
</wordEntry>
<wordEntry>
<search>Reductionism</search>
<replace>Reduccionismo</replace>
</wordEntry>
<wordEntry>
<search>Reductionism</search>
<replace>Reduccionismo</replace>
</wordEntry>
<wordEntry>
<search>Reductionist</search>
<replace>Reduccionismo</replace>
</wordEntry>
<wordEntry>
<search>Reductionist</search>
<replace>Reduccionismo</replace>
</wordEntry>
<wordEntry>
<search>Reductionistic</search>
<replace>Reduccionismo</replace>
</wordEntry>
<wordEntry>
<search>Reductionistic</search>
<replace>Reduccionismo</replace>
</wordEntry>
<wordEntry>
<search>Roman Holiday</search>
<replace>Vacaciones en Roma</replace>
</wordEntry>
<wordEntry>
<search>Romeo and Juliet</search>
<replace>Romeo y Julieta</replace>
</wordEntry>
<wordEntry>
<search>Sense and Sensibility</search>
<replace>Sensatez y sentimientos</replace>
</wordEntry>
<wordEntry>
<search>Smerdyakov</search>
<replace>Los hermanos Karamazov</replace>
</wordEntry>
<wordEntry>
<search>Solaris</search>
<replace>Solaris</replace>
</wordEntry>
<wordEntry>
<search>St Mark's Cathedral</search>
<replace>Basílica de San Marcos</replace>
</wordEntry>
<wordEntry>
<search>St Mark's Cathedral</search>
<replace>Basílica de San Marcos</replace>
</wordEntry>
<wordEntry>
<search>The Brothers Karamazov</search>
<replace>Los hermanos Karamazov</replace>
</wordEntry>
<wordEntry>
<search>The Da Vinci Code</search>
<replace>El código Da Vinci</replace>
</wordEntry>
<wordEntry>
<search>The Evil Dead</search>
<replace>Posesión infernal</replace>
</wordEntry>
<wordEntry>
<search>The Exorcist</search>
<replace>El Exorcista</replace>
</wordEntry>
<wordEntry>
<search>The Fast and the Furious</search>
<replace>The Fast and the Furious</replace>
</wordEntry>
<wordEntry>
<search>The Fugitive</search>
<replace>El fugitivo</replace>
</wordEntry>
<wordEntry>
<search>The Great Gatsby</search>
<replace>El gran Gatsby</replace>
</wordEntry>
<wordEntry>
<search>Gatsby</search>
<replace>El gran Gatsby</replace>
</wordEntry>
<wordEntry>
<search>The Idiot</search>
<replace>El idiota</replace>
</wordEntry>
<wordEntry>
<search>The Island</search>
<replace>La isla</replace>
</wordEntry>
<wordEntry>
<search>The Italian Job</search>
<replace>The Italian Job</replace>
</wordEntry>
<wordEntry>
<search>The Jazz Singer</search>
<replace>El cantante de jazz</replace>
</wordEntry>
<wordEntry>
<search>The Leopard</search>
<replace>El gatopardo</replace>
</wordEntry>
<wordEntry>
<search>The Maltese Falcon</search>
<replace>El halcón maltés</replace>
</wordEntry>
<wordEntry>
<search>The Mummy</search>
<replace>La Momia</replace>
</wordEntry>
<wordEntry>
<search>The Name of the Rose</search>
<replace>El nombre de la rosa</replace>
</wordEntry>
<wordEntry>
<search>The Neverending Story</search>
<replace>La historia interminable</replace>
</wordEntry>
<wordEntry>
<search>The Old Man and the Sea</search>
<replace>El viejo y el mar</replace>
</wordEntry>
<wordEntry>
<search>The Phantom of the Opera</search>
<replace>El Fantasma de la Ópera</replace>
</wordEntry>
<wordEntry>
<search>The Picture of Dorian Gray</search>
<replace>El retrato de Dorian Gray</replace>
</wordEntry>
<wordEntry>
<search>The Ring</search>
<replace>La señal</replace>
</wordEntry>
<wordEntry>
<search>The Spy Who Loved Me</search>
<replace>El espía que me amó</replace>
</wordEntry>
<wordEntry>
<search>The Stranger</search>
<replace>El extranjero</replace>
</wordEntry>
<wordEntry>
<search>The Ten Commandments</search>
<replace>Los diez mandamientos</replace>
</wordEntry>
<wordEntry>
<search>The Texas Chainsaw Massacre</search>
<replace>La matanza de Texas</replace>
</wordEntry>
<wordEntry>
<search>The Three Musketeers</search>
<replace>Los tres mosqueteros</replace>
</wordEntry>
<wordEntry>
<search>The Trial</search>
<replace>El proceso</replace>
</wordEntry>
<wordEntry>
<search>The Untouchables</search>
<replace>The Untouchables</replace>
</wordEntry>
<wordEntry>
<search>Titanic</search>
<replace>Titanic</replace>
</wordEntry>
<wordEntry>
<search>To Kill a Mockingbird</search>
<replace>Matar un ruiseñor</replace>
</wordEntry>
<wordEntry>
<search>Treasure Island</search>
<replace>La isla del tesoro</replace>
</wordEntry>
<wordEntry>
<search>Ulysses</search>
<replace>Ulises</replace>
</wordEntry>
<wordEntry>
<search>Universalism</search>
<replace>Universalismo</replace>
</wordEntry>
<wordEntry>
<search>Universalism</search>
<replace>Universalismo</replace>
</wordEntry>
<wordEntry>
<search>Universalism</search>
<replace>Universalismo</replace>
</wordEntry>
<wordEntry>
<search>Universalism</search>
<replace>Universalismo</replace>
</wordEntry>
<wordEntry>
<search>Universalist</search>
<replace>Universalismo</replace>
</wordEntry>
<wordEntry>
<search>Universalist</search>
<replace>Universalismo</replace>
</wordEntry>
<wordEntry>
<search>Universalist</search>
<replace>Universalismo</replace>
</wordEntry>
<wordEntry>
<search>Universalist</search>
<replace>Universalismo</replace>
</wordEntry>
<wordEntry>
<search>Universalists</search>
<replace>Universalismo</replace>
</wordEntry>
<wordEntry>
<search>Universalists</search>
<replace>Universalismo</replace>
</wordEntry>
<wordEntry>
<search>Valais</search>
<replace>Cantón del Valais</replace>
</wordEntry>
<wordEntry>
<search>Valais</search>
<replace>Cantón del Valais</replace>
</wordEntry>
<wordEntry>
<search>Valencia</search>
<replace>Comunidad Valenciana</replace>
</wordEntry>
<wordEntry>
<search>Valencia</search>
<replace>Provincia de Valencia</replace>
</wordEntry>
<wordEntry>
<search>Valencia</search>
<replace>Reino de Valencia</replace>
</wordEntry>
<wordEntry>
<search>Valencia</search>
<replace>Valencia</replace>
</wordEntry>
<wordEntry>
<search>València</search>
<replace>Valencia</replace>
</wordEntry>
<wordEntry>
<search>València</search>
<replace>Valencia</replace>
</wordEntry>
<wordEntry>
<search>Vaudevillian</search>
<replace>Vodevil</replace>
</wordEntry>
<wordEntry>
<search>Vaudevillian</search>
<replace>Vodevil</replace>
</wordEntry>
<wordEntry>
<search>Vaudevillians</search>
<replace>Vodevil</replace>
</wordEntry>
<wordEntry>
<search>Vaudevillians</search>
<replace>Vodevil</replace>
</wordEntry>
<wordEntry>
<search>Volcano</search>
<replace>Volcán</replace>
</wordEntry>
<wordEntry>
<search>Volcano</search>
<replace>Volcán</replace>
</wordEntry>
<wordEntry>
<search>War and Peace</search>
<replace>Guerra y paz</replace>
</wordEntry>
<wordEntry>
<search>War of the Worlds</search>
<replace>La guerra de los mundos</replace>
</wordEntry>
<wordEntry>
<search>Witness for the Prosecution</search>
<replace>Testigo de cargo</replace>
</wordEntry>
<wordEntry>
<search>Wuthering Heights</search>
<replace>Cumbres borrascosas</replace>
</wordEntry>
<wordEntry>
<search>X chromosome</search>
<replace>Cromosoma X</replace>
</wordEntry>
<wordEntry>
<search>X chromosome</search>
<replace>Cromosoma X</replace>
</wordEntry>
<wordEntry>
<search>Xenophon</search>
<replace>Jenofonte</replace>
</wordEntry>
<wordEntry>
<search>Xenophon</search>
<replace>Jenofonte</replace>
</wordEntry>
<wordEntry>
<search>Yacht</search>
<replace>Yate</replace>
</wordEntry>
<wordEntry>
<search>Yacht</search>
<replace>Yate</replace>
</wordEntry>
<wordEntry>
<search>Yakuza</search>
<replace>Yakuza</replace>
</wordEntry>
<wordEntry>
<search>Yakuza</search>
<replace>Yakuza</replace>
</wordEntry>
<wordEntry>
<search>You Only Live Twice</search>
<replace>Sólo se vive dos veces</replace>
</wordEntry>
<wordEntry>
<search>Yugoslav Macedonia</search>
<replace>República de Macedonia</replace>
</wordEntry>
<wordEntry>
<search>Yugoslav Macedonia</search>
<replace>República de Macedonia</replace>
</wordEntry>
<wordEntry>
<search>Yugoslav Partisans</search>
<replace>Partisanos</replace>
</wordEntry>
<wordEntry>
<search>Yugoslav Partisans</search>
<replace>Partisanos Yugoslavia</replace>
</wordEntry>
<wordEntry>
<search>Zespri</search>
<replace>Actinidia deliciosa</replace>
</wordEntry>
<wordEntry>
<search>Zespri</search>
<replace>Actinidia deliciosa</replace>
</wordEntry>
<wordEntry>
<search>Zimniy Dvorets</search>
<replace>Palacio de Invierno</replace>
</wordEntry>
<wordEntry>
<search>Zimniy Dvorets</search>
<replace>Palacio de Invierno</replace>
</wordEntry>
<wordEntry>
<search>Zosimus</search>
<replace>Zósimo</replace>
</wordEntry>
<wordEntry>
<search>Zosimus</search>
<replace>Zósimo historiador</replace>
</wordEntry>
</wordlist>
ASKER
Hi,
The code works PERFECT !! but how about the <total> element? I added the total element but I counl not count how may distinct search element? please read the question again and have a look at the amended XSLT code whereI added the <total> element but not working :(
Cheers,
The code works PERFECT !! but how about the <total> element? I added the total element but I counl not count how may distinct search element? please read the question again and have a look at the amended XSLT code whereI added the <total> element but not working :(
Cheers,
ASKER
sorry
here is the code
here is the code
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="search" match="wordEntry" use="search"/>
<xsl:key name="replace" match="wordEntry" use="concat(search, '-', replace)"/>
<xsl:template match="wordlist">
<Dictionary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="translation.xsd">
<from><xsl:value-of select="@from" /></from>
<to><xsl:value-of select="@to" /></to>
<total>
<xsl:value-of select="wordEntry[generate-id() = generate-id(key('wordEntry', search)[1])]"/>
</total>
<xsl:apply-templates select="wordEntry[generate-id() = generate-id(key('search', search)[1])]"/>
</Dictionary>
</xsl:template>
<xsl:template match="wordEntry">
<translation initial="{substring(search ,1,1)}">
<xsl:variable name="this-search" select="search"></xsl:variable>
<xsl:copy-of select="search"/>
<counter>
<xsl:value-of select="count(//wordEntry[generate-id() = generate-id(key('replace', concat($this-search, '-', replace))[1])])"/>
</counter>
<xsl:for-each select="//wordEntry[generate-id() = generate-id(key('replace', concat($this-search, '-', replace))[1])]">
<xsl:copy-of select="replace"/>
</xsl:for-each>
</translation>
</xsl:template>
</xsl:stylesheet>
you forgot the count() function
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
<xsl:output method="xml" version="1.0" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="search" match="wordEntry" use="search"/>
<xsl:key name="replace" match="wordEntry" use="concat(search, '-', replace)"/>
<xsl:template match="wordlist">
<Dictionary xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="translation.xsd">
<from><xsl:value-of select="@from" /></from>
<to><xsl:value-of select="@to" /></to>
<total>
<xsl:value-of select="count(wordEntry[generate-id() = generate-id(key('search', search)[1])])"/>
</total>
<xsl:apply-templates select="wordEntry[generate-id() = generate-id(key('search', search)[1])]"/>
</Dictionary>
</xsl:template>
<xsl:template match="wordEntry">
<translation initial="{substring(search ,1,1)}">
<xsl:variable name="this-search" select="search"></xsl:variable>
<xsl:copy-of select="search"/>
<counter>
<xsl:value-of select="count(//wordEntry[generate-id() = generate-id(key('replace', concat($this-search, '-', replace))[1])])"/>
</counter>
<xsl:for-each select="//wordEntry[generate-id() = generate-id(key('replace', concat($this-search, '-', replace))[1])]">
<xsl:copy-of select="replace"/>
</xsl:for-each>
</translation>
</xsl:template>
</xsl:stylesheet>
ASKER
YOU ARE REALLY GENIUS !!! can I put another thread to explain the XSLT code you have written in simple English? or you write them here? I really need to understand it
Cheers,
Cheers,
The proper thing to do is to put it here.
Is it OK if I did that in an hour or so?
Is it OK if I did that in an hour or so?
ASKER
I can wait for one hour.. after that I will accept your reply as the solution....
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
sorry to open up this discussion again but I'm wondering why the total elements prints 150 instead 151? I have been informed that it should 151 but the result is 150 !!!
Cheers,
Cheers,
strange,
if I count the number of translation elements in the output, i get 150 translation elements,
count(//translation) on the output
so based on the output, the count is right
I also tested on smaller sets (prior to posting the XSLT by the way) so I could manually count the input nodes and output nodes, and I did not miss one. So I was allready convinced about the correctness of the count prior to posting tyhe XSLT
It could be that I missed a record because of something in the data, but you can only know that if you start verifying the data
So, based on your follow up, I did this XPath test on the source data
count(//wordEntry[not(sear ch = preceding-sibling::wordEnt ry/search) ])
this is an expensive way to discover the unique values in a XML, with one single XPath 1.0
I also did this XPath2.0 test
count(distinct-values(//wo rdEntry/se arch))
With different XPath processors
All return 150
I am quiet convinced that the process counting 151 has a bug, or is counting a different result set.
(maybe also counting the header row in a table?)
if I count the number of translation elements in the output, i get 150 translation elements,
count(//translation) on the output
so based on the output, the count is right
I also tested on smaller sets (prior to posting the XSLT by the way) so I could manually count the input nodes and output nodes, and I did not miss one. So I was allready convinced about the correctness of the count prior to posting tyhe XSLT
It could be that I missed a record because of something in the data, but you can only know that if you start verifying the data
So, based on your follow up, I did this XPath test on the source data
count(//wordEntry[not(sear
this is an expensive way to discover the unique values in a XML, with one single XPath 1.0
I also did this XPath2.0 test
count(distinct-values(//wo
With different XPath processors
All return 150
I am quiet convinced that the process counting 151 has a bug, or is counting a different result set.
(maybe also counting the header row in a table?)
ASKER
yeah... you are totally right... I believe that 151 is a bug...
Thanks mate...
Thanks mate...
welcome
Hi, this example is really helpful, one quick question,how can it be written using a for each loop instead of using the generate-id,just to see the differences...Thanks again
hi jhonc66, I don't understand your question.
The first generate-id() is in an apply-templates, which is similar to for-each, but simply much better design
The second generate-id() is in a for-each
There is a way to find a ditinct node without muenchian
eg. to find the unique <bar>, based on a subelement <foo>
bar[not(foo = preceding-sibling::bar/foo )]
But that will imply looking up the entire preceding-sibling axis for every bar
and should be avoided in XSLT
It could help in a XPath only setting, but then I recommend moving to XPath2.0 and use the distinct-values() function
The first generate-id() is in an apply-templates, which is similar to for-each, but simply much better design
The second generate-id() is in a for-each
There is a way to find a ditinct node without muenchian
eg. to find the unique <bar>, based on a subelement <foo>
bar[not(foo = preceding-sibling::bar/foo
But that will imply looking up the entire preceding-sibling axis for every bar
and should be avoided in XSLT
It could help in a XPath only setting, but then I recommend moving to XPath2.0 and use the distinct-values() function
Open in new window