XML : XSLT - summing element values with a colon

I want sum values of elements "time". Here is my xml:

      <document>  <recordlist>      <bestseller year="2015">          <plate id="p01" kind="Pop&amp;Rock">              <title>Atramentowa</title>              <performer>Celińska Stanisława</performer>              <release_date>2015-05-08</release_date>              <distributor idref="d1" />              <price currency="PLN">37,49</price>              <year_recorded>2015</year_recorded>              <availability mp3="1" cd="0" dvd="1" />              <playlist id="pl01" nazwa="Atramentowa">                  <track id="p01u01">Czerń i biel<time>3:27</time></track>                  <track id="p01u02">Czy o kimś ktoś<time>2:17</time></track>                  <track id="p01u03">Atramentowa rumba<time>5:16</time></track>                  <track id="p01u04">Do rycerzy, do szlachty, do mieszczan<time>3:22</time></track>                  <track id="p01u05">Drzwi odemknij<time>3:21</time></track>                  <track id="p01u06">Moje życie, twoje życie<time>3:19</time></track>                  <track id="p01u07">Obfitość<time>3:20</time></track>                  <track id="p01u08">Jego portret<time>3:15</time></track>                  <track id="p01u09">I znowu on<time>3:11</time></track>                  <track id="p01u10">Nie strasz<time>3:55</time></track>                  <track id="p01u11">Smuteczku mój<time>3:44</time></track>                  <track id="p01u12">Szeptem do mnie mów<time>3:33</time></track>                  <track id="p01u13">Wielka słota<time>3:11</time></track>                  <track id="p01u14">Wakacje z deszczem<time>2:59</time></track>                  <track id="p01u15">Pieśń cygańska<time>3:09</time></track> </playlist>          </plate>  </bestseller>  </recordlist>  </document>    

Here is my xslt:

  <?xml version="1.0" encoding="UTF-8"?>  <xsl:stylesheet    version="1.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">    <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="bestseller/@year | plate/@kind">       <xsl:element name="{name()}">            <xsl:value-of select="."/>      </xsl:element>  </xsl:template>    <xsl:template match="//recordlist">    <xsl:element name="recordlist">        <xsl:apply-templates select="bestseller"/>    </xsl:element>  </xsl:template>    <xsl:template match="//plate">    <xsl:element name="plate">      <xsl:element name="kind">          <xsl:value-of select="./@kind"/>      </xsl:element>      <xsl:element name="title">          <xsl:value-of select="./title"/>      </xsl:element>      <xsl:element name="performer">          <xsl:value-of select="./performer"/>      </xsl:element>      <xsl:element name="release_date">          <xsl:value-of select="./release_date"/>      </xsl:element>      <xsl:element name="price">          <xsl:value-of select="./price"/>      </xsl:element>      <xsl:element name="year_recorded">          <xsl:value-of select="./year_recorded"/>      </xsl:element>      <xsl:element name="time_duration">          <xsl:value-of select="sum(*/time)"/>      </xsl:element>      <xsl:element name="time_from_release">          <xsl:value-of select="time"/>      </xsl:element>      <xsl:apply-templates select="playlist"/>    </xsl:element>  </xsl:template>    <xsl:template match="//playlist">    <xsl:element name="playlist">      <xsl:for-each select="track">          <xsl:element name="track">              <xsl:value-of select="node()"/>              <xsl:apply-templates select="time"/>          </xsl:element>      </xsl:for-each>    </xsl:element>  </xsl:template>    <xsl:template match="//time">    <xsl:element name="time">            <xsl:value-of select="."/>        </xsl:element>  </xsl:template>  </xsl:stylesheet>    

And I expect the effect like this:

  <?xml version="1.0" encoding="UTF-8"?>  <document>  <recordlist>  <bestseller>  <year>2015</year>  <plate>  <kind>Pop&amp;Rock</kind>  <title>Atramentowa</title>  <performer>Celińska Stanisława</performer>  <release_date>2015-05-08</release_date>  <price>37,49</price>  <year_recorded>2015</year_recorded>  <time_duration>RESLUT</time_duration>          <time_from_release />  <playlist>         <track>            Czerń i biel            <czas>3:27</czas>         </track>         <track>            Czy o kimś ktoś            <czas>2:17</czas>         </track>         <track>            Atramentowa rumba            <czas>5:16</czas>         </track>         <track>            Do rycerzy, do szlachty, do mieszczan            <czas>3:22</czas>         </track>         <track>            Drzwi odemknij            <czas>3:21</czas>         </track>         <track>            Moje życie, twoje życie            <czas>3:19</czas>         </track>         <track>            Obfitość            <czas>3:20</czas>         </track>         <track>            Jego portret            <czas>3:15</czas>         </track>         <track>            I znowu on            <czas>3:11</czas>         </track>         <track>            Nie strasz            <czas>3:55</czas>         </track>         <track>            Smuteczku mój            <czas>3:44</czas>         </track>         <track>            Szeptem do mnie mów            <czas>3:33</czas>         </track>         <track>            Wielka słota            <czas>3:11</czas>         </track>         <track>            Wakacje z deszczem            <czas>2:59</czas>         </track>         <track>            Pieśń cygańska            <czas>3:09</czas>         </track>  </playlist>  </plate>  </bestseller>  </recordlist>  </document>    

In element "time_duration" i expect the total time of plate like (xx:xx), now i have only output equal 0.

And the second question is how to count the difference between element "release_date" and current date. I know i have to add to stylesheet

  xmlns:datetime="http://exslt.org/dates-and-times"    

and then i can use the function

  current-date()    

However site http://exslt.org/dates-and-times doesn't exist, so i can't use this function, am i right?

No comments:

Post a Comment