-
Notifications
You must be signed in to change notification settings - Fork 0
/
library.xsl
92 lines (71 loc) · 3.49 KB
/
library.xsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="2.0">
<xsl:key name="publisher" match="/Library/publishers/pub/name" use="../@id"/>
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<xsl:element name="library">
<xsl:element name="books">
<xsl:for-each select="Library/books/book">
<xsl:sort select="authors/@sort" lang="pl"/>
<xsl:sort select="series" lang="pl"/>
<xsl:sort select="series/@index" data-type="number"/>
<xsl:element name="book">
<xsl:attribute name="id">
<xsl:value-of select="@nr"/>
</xsl:attribute>
<xsl:copy-of select="title|authors"/>
<xsl:if test="series">
<xsl:copy-of select="series"/>
</xsl:if>
<xsl:if test="not(series)">
<series inedx=''></series>
</xsl:if>
<xsl:element name="publisher">
<xsl:value-of select="key('publisher',publisher/@idref)"/>
</xsl:element>
<xsl:element name="pages">
<xsl:value-of select="_pages"/>
</xsl:element>
<xsl:copy-of select="tags"/>
<xsl:copy-of select="size"/>
<xsl:copy-of select="files"/>
<xsl:copy-of select="price"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
<xsl:element name="statistics">
<booksNumber><xsl:value-of select="count(//book)"/></booksNumber>
<xsl:element name="genres">
<xsl:for-each select="//genre[not(.=preceding::genre)]">
<xsl:variable name="tmp" select="."/>
<xsl:element name="genre">
<xsl:attribute name="howMany">
<xsl:value-of select="count(//genre[.=$tmp])"/>
</xsl:attribute>
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:element>
<xsl:element name="publishers">
<xsl:for-each select="//pub[not(name=preceding::name)]">
<xsl:variable name="tmp" select="."/>
<xsl:element name="publisher">
<xsl:attribute name="howMany">
<xsl:value-of select="count(//publisher[@idref=$tmp/@id])"/>
</xsl:attribute>
<xsl:value-of select="name"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
<xsl:element name="prices">
<xsl:element name="sumPrice">
<xsl:attribute name="currency">PLN</xsl:attribute>
<xsl:value-of select="format-number(sum(//price[@currency='PLN']),'#0.00')"/>
</xsl:element>
</xsl:element>
<xsl:element name="generated"></xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>