XML : Create TXT from XML using XSLT - display elements

I am trying to create text file from xml using xslt, and i have a problem.

here is my xml:

  <?xml version="1.0" encoding="UTF-8"?>  <document>      <płytoteka>    <bestseller rok="2015">       <płyta id="p01">          <gatunek>Pop&amp;Rock</gatunek>          <tytuł>Atramentowa</tytuł>          <wykonawca>Celińska Stanisława</wykonawca>          <data_premiery>2015-05-08</data_premiery>          <cena>37.49</cena>          <rok_nagrania>2015</rok_nagrania>          <czas_trwania>51:19</czas_trwania>          <czas_od_premiery>P222D</czas_od_premiery>          <dostepnosc mp3="1" cd="0" dvd="1"/>          <playlista>             <utwór>Czerń i biel<czas>3:27</czas>             </utwór>             <utwór>Czy o kimś ktoś<czas>2:17</czas>             </utwór>             <utwór>Atramentowa rumba<czas>5:16</czas>             </utwór>             <utwór>Do rycerzy, do szlachty, do mieszczan<czas>3:22</czas>             </utwór>             <utwór>Drzwi odemknij<czas>3:21</czas>             </utwór>             <utwór>Moje życie, twoje życie<czas>3:19</czas>             </utwór>             <utwór>Obfitość<czas>3:20</czas>             </utwór>             <utwór>Jego portret<czas>3:15</czas>             </utwór>             <utwór>I znowu on<czas>3:11</czas>             </utwór>             <utwór>Nie strasz<czas>3:55</czas>             </utwór>             <utwór>Smuteczku mój<czas>3:44</czas>             </utwór>             <utwór>Szeptem do mnie mów<czas>3:33</czas>             </utwór>             <utwór>Wielka słota<czas>3:11</czas>             </utwór>             <utwór>Wakacje z deszczem<czas>2:59</czas>             </utwór>             <utwór>Pieśń cygańska<czas>3:09</czas>             </utwór>          </playlista>       </płyta>    </bestseller>    </płytoteka>    </document>    

Next is my xslt code:

  <?xml version="1.0" encoding="utf-8"?>  <xsl:stylesheet version="1.0"               xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  <xsl:output method="text"/>        <xsl:template match="text()">          <xsl:if test="normalize-space(.)">              <xsl:value-of select="concat(normalize-space(.), '')"/>          </xsl:if>          <xsl:apply-templates/>      </xsl:template>        <xsl:template match="/">          <xsl:text>TXT&#xA;</xsl:text>          <xsl:apply-templates />      </xsl:template>        <xsl:template match="płytoteka">          <xsl:apply-templates select="bestseller"/>          <xsl:text>&#xA;</xsl:text>      </xsl:template>        <xsl:template match="bestseller">          <xsl:text>&#xA;</xsl:text>          <xsl:text>BESTSELLER:</xsl:text>          <xsl:value-of select="concat('&#x9;&#x9;',./@rok,'&#xA;')" />          <xsl:text>&#xA;</xsl:text>          <xsl:apply-templates select="płyta"/>          <xsl:text>&#xA;</xsl:text>      </xsl:template>        <xsl:template match="płyta">          <xsl:text>&#xA;</xsl:text>          <xsl:text>PLYTA:&#xA;</xsl:text>          <xsl:text>Gatunek:&#x9;</xsl:text>          <xsl:apply-templates select="gatunek"/>          <xsl:text>&#xA;</xsl:text>          <xsl:text>Tytul: &#x9;</xsl:text>          <xsl:apply-templates select="tytuł"/>          <xsl:text>&#xA;</xsl:text>          <xsl:text>Wykonawca: &#x9;</xsl:text>          <xsl:apply-templates select="wykonawca"/>          <xsl:text>&#xA;</xsl:text>          <xsl:text>Data premiery: &#x9;</xsl:text>          <xsl:apply-templates select="data_premiery"/>          <xsl:text>&#xA;</xsl:text>          <xsl:text>Cena: &#x9;</xsl:text>          <xsl:apply-templates select="cena"/>          <xsl:text>&#xA;</xsl:text>          <xsl:text>Rok nagrania: &#x9;</xsl:text>          <xsl:apply-templates select="rok_nagrania"/>          <xsl:text>&#xA;</xsl:text>          <xsl:text>Czas trwania: &#x9;</xsl:text>          <xsl:apply-templates select="czas_trwania"/>          <xsl:text>&#xA;</xsl:text>          <xsl:text>Czas od premiery: &#x9;</xsl:text>          <xsl:apply-templates select="czas_od_premiery"/>          <xsl:text>&#xA;</xsl:text>          <xsl:apply-templates select="playlista"/>      </xsl:template>        <xsl:template match="playlista">          <xsl:text>&#xA;</xsl:text>          <xsl:text>&#x9;&#x9;UTWORY:&#xA;&#x9;&#x9;</xsl:text>          <xsl:for-each select="utwór">              <xsl:value-of select="."/>          </xsl:for-each>          <xsl:text>&#xA;</xsl:text>      </xsl:template>     </xsl:stylesheet>    

And my output:

  TXT    BESTSELLER:     2015      PLYTA:  Gatunek:    Pop&Rock  Tytul:  Atramentowa  Wykonawca:  Celińska Stanisława  Data premiery:  2015-05-08  Cena:   37.49  Rok nagrania:   2015  Czas trwania:   51:19  Czas od premiery:   P222D        UTWORY:      Czerń i biel3:27             Czy o kimś ktoś2:17             Atramentowa rumba5:16             Do rycerzy, do szlachty, do mieszczan3:22             Drzwi odemknij3:21             Moje życie, twoje życie3:19             Obfitość3:20             Jego portret3:15             I znowu on3:11             Nie strasz3:55             Smuteczku mój3:44             Szeptem do mnie mów3:33             Wielka słota3:11             Wakacje z deszczem2:59             Pieśń cygańska3:09    

And the problem is about elements "utwór" and "czas" from the xml file, this elements i want to display in the txt output, more divided, for example:

  UTWORY:          Czerń i biel     3:27                 Czy o kimś ktoś     2:17                 Atramentowa rumba     5:16                 Do rycerzy, do szlachty, do mieszczan     3:22                 Drzwi odemknij     3:21                 Moje życie, twoje życie     3:19                 Obfitość     3:20                 Jego portret     3:15                 I znowu on     3:11                 Nie strasz     3:55                 Smuteczku mój     3:44                 Szeptem do mnie mów     3:33                 Wielka słota     3:11                 Wakacje z deszczem     2:59                 Pieśń cygańska     3:09    

I just want to make space between this elements or even better display this two elements in some kind of order, just to be pleasing to the eyes, like:

      UTWORY:                 Czerń i biel                              3:27                 Czy o kimś ktoś                           2:17                 Atramentowa rumba                         5:16                 Do rycerzy, do szlachty, do mieszczan     3:22                 Drzwi odemknij                            3:21                 Moje życie, twoje życie                   3:19                 Obfitość                                  3:20                 Jego portret                              3:15                 I znowu on                                3:11                 Nie strasz                                3:55                 Smuteczku mój                             3:44                 Szeptem do mnie mów                       3:33                 Wielka słota                              3:11                 Wakacje z deszczem                        2:59                 Pieśń cygańska                            3:09    

is it even possible? I am using to transform http://xsltransform.net

One more thing, i have to apologise for some Polish words, i was to lazy to translate some names of elements to english, and i know if everything would be in english the files will be more clearly, but in the end, it is just about xslt logic. Thank you in advance.

No comments:

Post a Comment