|
<?xml version='1.0' encoding="windows-1251"?>
|
|
|
|
|
|
<!--
|
|
Rao report template file version 1.0
|
|
24 jan 2008
|
|
-->
|
|
|
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
|
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
|
|
xmlns:tractt ="urn:www.tract.ru:digispot2:report-template"
|
|
xmlns:tracts ="urn:www.tract.ru:digispot2:report-script"
|
|
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
|
|
xmlns:o="urn:schemas-microsoft-com:office:office"
|
|
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
|
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
|
|
version="1.0">
|
|
|
|
|
|
<tractt:environment>
|
|
<tractt:fields>
|
|
<tractt:field name="report-start-date" type="time" subtype="date" title="Дата начала отчета" format="%d %B %Y" visible="0" />
|
|
<tractt:field name="report-end-date" type="time" subtype="date" title="Дата окончания отчета" format="%d %B %Y" visible="0"/>
|
|
<tractt:field name="report-date" type="time" title="Дата отчета" subtype="date" format="%d.%m.%Y" />
|
|
</tractt:fields>
|
|
|
|
<tractt:source-template src="RAO_hdr.xml" name="ehead" />
|
|
|
|
</tractt:environment>
|
|
|
|
<msxsl:script language="JScript" implements-prefix="tracts">
|
|
<![CDATA[
|
|
var Counter = 1;
|
|
function NextCounter() {
|
|
return Counter++;
|
|
}
|
|
|
|
function TimeStr( seconds )
|
|
{
|
|
seconds = parseInt(seconds);
|
|
|
|
var h = Math.floor(( seconds ) / 3600 );
|
|
var m = Math.floor(( seconds % 3600 ) / 60 );
|
|
var s = (seconds % 60);
|
|
|
|
var ss = new String(h)
|
|
if( ss.length <2 )
|
|
ss = "0"+ ss;
|
|
var res = ss + ":";
|
|
|
|
var ss = new String(m)
|
|
if( ss.length <2 )
|
|
ss = "0"+ ss;
|
|
res = res + ss + ":";
|
|
|
|
ss = new String(s)
|
|
if( ss.length <2 )
|
|
ss = "0"+ ss;
|
|
|
|
res = "1899-12-31T"+ res + ss;
|
|
return res;
|
|
}
|
|
]]>
|
|
</msxsl:script>
|
|
|
|
<xsl:output method="xml" version='1.0' omit-xml-declaration="yes" indent="yes" />
|
|
|
|
<xsl:key name="artist_search" match="//tractt:tract-data//tractt:item" use="tractt:artist"/>
|
|
<xsl:key name="title_search" match="//tractt:tract-data//tractt:item" use="concat(tractt:artist, '=>', tractt:title)"/>
|
|
|
|
<xsl:template match="/">
|
|
<xsl:processing-instruction name="mso-application"> progid="Excel.Sheet"</xsl:processing-instruction>
|
|
<xsl:apply-templates select="//ss:Workbook" />
|
|
</xsl:template>
|
|
|
|
<!-- stubs -->
|
|
<xsl:template match="//ss:Table/@ss:ExpandedRowCount" />
|
|
<xsl:template match="//ss:Table/@ss:ExpandedColumnCount" />
|
|
<xsl:template match="//ss:Row/@ss:Index" />
|
|
|
|
<xsl:template match="//ss:Workbook">
|
|
<xsl:copy>
|
|
<xsl:apply-templates select="@* | node()" />
|
|
</xsl:copy>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="//ss:Styles">
|
|
<xsl:copy>
|
|
<xsl:apply-templates select="@* | node()" />
|
|
<Style ss:ID="TractLongHourTime">
|
|
<NumberFormat ss:Format="[h]:mm:ss"/>
|
|
</Style>
|
|
<Style ss:ID="TractMmSsTime">
|
|
<NumberFormat ss:Format="mm:ss"/>
|
|
</Style>
|
|
</xsl:copy>
|
|
</xsl:template>
|
|
|
|
|
|
<xsl:template match="@* | node()">
|
|
<xsl:copy>
|
|
<xsl:apply-templates select="@* | node()" />
|
|
</xsl:copy>
|
|
</xsl:template>
|
|
|
|
|
|
<xsl:template match="//ss:Data[starts-with(string(.),'tt:')]">
|
|
<xsl:copy>
|
|
<xsl:for-each select="@*">
|
|
<xsl:copy />
|
|
</xsl:for-each>
|
|
<xsl:value-of select="//tractt:header/*[local-name(.)=substring-after(current(),':')]" />
|
|
</xsl:copy>
|
|
</xsl:template>
|
|
|
|
<xsl:template match="//ss:Row[string(.//ss:Data)='tp:report-list']">
|
|
<!-- <xsl:copy-of select="." /> -->
|
|
<xsl:for-each select="//tractt:report-data/tractt:item[count( . | key('artist_search',tractt:artist)[1])=1]">
|
|
<!-- один раз для артиста. Контекст=первый item c таким артистом-->
|
|
<xsl:sort select="tractt:artist" />
|
|
<xsl:variable name="songs" select="key('artist_search',tractt:artist)" />
|
|
<xsl:variable name="artsongs" select="$songs[generate-id()=generate-id(key('title_search',concat(tractt:artist, '=>', tractt:title))[1])]" />
|
|
<xsl:call-template name="songsofartist">
|
|
<xsl:with-param name="songs" select="$artsongs"/>
|
|
</xsl:call-template>
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
|
|
|
|
<xsl:template name="songsofartist">
|
|
<xsl:param name="songs"/>
|
|
<xsl:for-each select="$songs">
|
|
|
|
<!-- Вызывается один раз для уникальной пары artist-title.
|
|
текущий узел - первый item с такими artist-title. -->
|
|
<xsl:sort select="tractt:title" />
|
|
<xsl:variable name="samesongs" select="key('title_search', concat(tractt:artist, '=>', tractt:title))"/>
|
|
|
|
<Row>
|
|
<Cell><Data ss:Type="String"></Data></Cell>
|
|
<Cell><Data ss:Type="String"> <xsl:value-of select="tractt:title" /> </Data></Cell>
|
|
<Cell><Data ss:Type="String"> <xsl:value-of select="tractt:author" /> </Data></Cell>
|
|
<Cell ss:StyleID="TractMmSsTime" ss:Formula="=TIME(0,0,{number($samesongs[1]/tractt:playtime)})">
|
|
<Data ss:Type="DateTime" >1899-12-31T00:00:00</Data>
|
|
</Cell>
|
|
<Cell><Data ss:Type="Number"> <xsl:value-of select="count($samesongs)"/></Data></Cell>
|
|
<Cell ss:StyleID="TractLongHourTime" ss:Formula="=RC[-2]*RC[-1]" ><Data ss:Type="DateTime">1899-12-31T00:00:00</Data></Cell>
|
|
<Cell><Data ss:Type="String"> <xsl:text>Песня</xsl:text></Data></Cell>
|
|
<Cell><Data ss:Type="String"> <xsl:value-of select="tractt:artist" /></Data></Cell>
|
|
</Row>
|
|
|
|
<!-- <xsl:value-of select="tracts:FTime( $samesongs[1]/tractt:playtime)"/> -->
|
|
<!-- <Cell><Data ss:Type="Number"><xsl:value-of select="tracts:NextCounter()" /></Data></Cell> -->
|
|
<!-- <Cell ss:StyleID="TractTimeStyle"><Data ss:Type="DateTime"><xsl:value-of select="tracts:FTime( sum($samesongs/tractt:playtime))"/></Data></Cell> -->
|
|
|
|
</xsl:for-each>
|
|
</xsl:template>
|
|
|
|
|
|
</xsl:stylesheet>
|
|
|