I want to use key() function in XSLT and display value of attribute for each element "dystrybutor". I know that it could be done in easier way, but i want to make it that way if is it possible.
Here is my XML
<document> <płytoteka> <bestseller rok="2015"> <płyta id="p01" gatunek="Pop&Rock"> <tytuł>Atramentowa</tytuł> <wykonawca>Celińska Stanisława</wykonawca> <data_premiery>2015-05-08</data_premiery> <dystrybutor idref="d1" /> <cena waluta="PLN">37.49</cena> <rok_nagrania>2015</rok_nagrania> </płyta> <płyta id="p08" gatunek="Pop&Rock"> <tytuł>Składam się z ciągłych powtórzeń</tytuł> <wykonawca>Rojek Artur</wykonawca> <data_premiery>2014-04-04</data_premiery> <dystrybutor idref="d1" /> <cena waluta="PLN">33.99</cena> <rok_nagrania>2014</rok_nagrania> </płyta> </bestseller> </płytoteka> </document> and XSLT
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" xmlns:date="http://exslt.org/dates-and-times" extension-element-prefixes="date" xmlns:math="http://exslt.org/math" xmlns:fn="http://www.w3.org/2005/xpath-functions"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" /> <xsl:template match="*"> <xsl:copy> <xsl:apply-templates select="@* | node()" /> </xsl:copy> </xsl:template> <xsl:template match="@* | *[not(node())]" /> <xsl:template match="/document"> <xsl:apply-templates /> </xsl:template> <xsl:template match="/"> <xsl:element name="document"> <xsl:apply-templates /> </xsl:element> </xsl:template> <xsl:template match="//płytoteka"> <xsl:element name="płytoteka"> <xsl:apply-templates select="bestseller" /> </xsl:element> </xsl:template> <xsl:template match="//bestseller"> <xsl:element name="bestseller"> <xsl:attribute name="rok"> <xsl:value-of select="./@rok" /> </xsl:attribute> <xsl:apply-templates select="płyta" /> </xsl:element> </xsl:template> <xsl:template match="//płyta"> <xsl:element name="płyta"> <xsl:attribute name="id"> <xsl:value-of select="./@id" /> </xsl:attribute> <xsl:element name="gatunek"> <xsl:value-of select="./@gatunek" /> </xsl:element> <xsl:element name="tytuł"> <xsl:value-of select="./tytuł" /> </xsl:element> <xsl:element name="wykonawca"> <xsl:value-of select="./wykonawca" /> </xsl:element> <xsl:element name="data_premiery"> <xsl:value-of select="./data_premiery" /> </xsl:element> <xsl:element name="dystrybutor"> <xsl:variable name="WybranyDystrybutor" select="key('dystrybutorKEY', @idref)" /> <!--<xsl:attribute name="idref"> <xsl:value-of select="./dystrybutor/@idref" /> </xsl:attribute>--> <xsl:attribute name="idref"> <xsl:value-of select="$WybranyDystrybutor/@idref" /> </xsl:attribute> </xsl:element> <xsl:apply-templates select="cena"/> <xsl:element name="rok_nagrania"> <xsl:value-of select="./rok_nagrania" /> </xsl:element> <xsl:apply-templates select="playlista" /> </xsl:element> </xsl:template> <xsl:key use="@idref" name="dystrybutorKEY" match="//bestseller/płyta/dystrybutor" /> </xsl:stylesheet> I expect
<?xml version="1.0" encoding="UTF-8"?> <document> <płytoteka> <bestseller rok="2015"> <płyta id="p01"> <gatunek>Pop&Rock</gatunek> <tytuł>Atramentowa</tytuł> <wykonawca>Celińska Stanisława</wykonawca> <data_premiery>2015-05-08</data_premiery> <dystrybutor idref="d1"/> <cena>37.49</cena> <rok_nagrania>2015</rok_nagrania> </płyta> <płyta id="p08"> <gatunek>Pop&Rock</gatunek> <tytuł>Składam się z ciągłych powtórzeń</tytuł> <wykonawca>Rojek Artur</wykonawca> <data_premiery>2014-04-04</data_premiery> <dystrybutor idref="d1"/> <cena>33.99</cena> <rok_nagrania>2014</rok_nagrania> </płyta> </bestseller> </płytoteka> </document> Thank you in advance.
No comments:
Post a Comment