Mam oto taki plik XML:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="tranformacja.xsl"?>
<faktura nr="234/2006" datawystawienia="2006-10-24" datasprzedazy="2006-10-24">
<sprzedawca nip="677-15-91-304">
<firma>Marpol sp. z o.o.</firma>
<adres>ul. Bajeczna 15</adres>
<kod>32-097</kod>
<miejscowosc>Kraków</miejscowosc>
</sprzedawca>
<nabywca nip="677-15-91-304">
<nazwisko>Wójtowicz</nazwisko>
<imie>Łukasz</imie>
<adres>Al.Niepodległości 109</adres>
<kod>00-912</kod>
<miejscowosc>Warszawa</miejscowosc>
</nabywca>
<pozycja rodzaj="towar">
<nazwa>cegła pełna</nazwa>
<ilosc jm="szt">12600</ilosc>
<cenajednostkowa waluta="PLN">0.26</cenajednostkowa>
<stawkaVAT>22</stawkaVAT>
</pozycja>
<pozycja rodzaj="towar">
<nazwa>cement</nazwa>
<ilosc jm="kg">1420</ilosc>
<cenajednostkowa waluta="PLN">3.50</cenajednostkowa>
<stawkaVAT>7</stawkaVAT>
</pozycja>
</faktura>
<faktura nr="75/FV/2006" datawystawienia="2006-08-07" datasprzedazy="2006-08-12">
<sprzedawca nip="821-00-21-777">
<firma>Rowenta</firma>
<adres>ul. Kurczaby 394</adres>
<kod>41-220</kod>
<miejscowosc>Żyrardów</miejscowosc>
</sprzedawca>
<nabywca nip="223-77-12-567">
<firma>Budopol S.A.</firma>
<adres>ul. Olszaniecka 3</adres>
<kod>12-201</kod>
<miejscowosc>Zielona Góra</miejscowosc>
</nabywca>
<pozycja rodzaj="towar">
<nazwa>okno dachowe</nazwa>
<ilosc jm="szt">172</ilosc>
<cenajednostkowa waluta="PLN">420</cenajednostkowa>
<stawkaVAT>7</stawkaVAT>
</pozycja>
<pozycja rodzaj="towar">
<nazwa>farba emulsyjna</nazwa>
<ilosc jm="l">47</ilosc>
<cenajednostkowa waluta="PLN">35.20</cenajednostkowa>
<stawkaVAT>22</stawkaVAT>
</pozycja>
<pozycja rodzaj="usługa">
<nazwa>transport</nazwa>
<ilosc jm="szt">1</ilosc>
<cenajednostkowa waluta="PLN">950</cenajednostkowa>
<stawkaVAT>zw</stawkaVAT>
</pozycja>
<pozycja rodzaj="usługa">
<nazwa>malowanie ścian zewnętrznych</nazwa>
<ilosc jm="m2">140</ilosc>
<cenajednostkowa waluta="PLN">37.20</cenajednostkowa>
<stawkaVAT>7</stawkaVAT>
</pozycja>
<pozycja rodzaj="towar">
<nazwa>listwy wykończeniowe ozdobne</nazwa>
<ilosc jm="szt">17</ilosc>
<cenajednostkowa waluta="PLN">21</cenajednostkowa>
<stawkaVAT>22</stawkaVAT>
</pozycja>
<pozycja rodzaj="towar">
<nazwa>ekologiczny klej do tapet</nazwa>
<ilosc jm="szt">8</ilosc>
<cenajednostkowa waluta="PLN">47.2</cenajednostkowa>
<stawkaVAT>3</stawkaVAT>
</pozycja>
</faktura>
</faktury>
i do niego muszę utworzyć schemat który dla faktury 75/FV/2006 utworzy fakturę o tabelarycznym układzie w XML. Sam układ jest już zrobiony, jednak mam kilka problemów:
1) posortować wg. nazwy pozycji - kombinuje kombinuje i albo mi wyświetla bez sortowania, albo sortuje, leczy wyświetla w jednym wierszu, zamiast w kolumnie
2) ustawić żeby miejsca dziesiętne oddzielał przecinek, a nie kropka - niby też proste, ale użyłem wszelkich możliwych kombinacji i albo mi ustawia kropkę jako separator, albo przecinek przesuwa się o 2 miejsca (np. mam liczbę 420, przecinek zamiast dać liczbę 420,00 daje liczbę 4,20).
3) zsumować wartości netto, brutto, wartość podatku - używając funkcji (sum(ilosc*cena) krzyczy, że tak być nie może.
Oto kod XSL, mam nadzieję, że ktoś dla kogo to pikuś mi pomoże ;]:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" />
<xsl:decimal-format name="pln" decimal-separator="," grouping-separator="."/>
<xsl:variable name="cenaNetto">
<xsl:value-of select="faktury/faktura[@nr='75/FV/2006']/pozycja/cenajednostkowa*faktury/faktura[@nr='75/FV/2006']/pozycja/ilosc"/>
</xsl:variable>
<xsl:template match="/">
<html>
<head>
<title>Faktura VAT</title>
<style type="text/css">
body {
font-family: Arial, Helvetica, sans-serif;
font-size: 0px;
color:white;
}
.sprzedawca {
border: 0px solid #000000;
text-align: justify;
font-family: Arial, Helvetica, sans-serif;
font-size: 14px;
font-weight: normal;
padding-top: 25px;
padding-left: 10px;
color: #666666;
padding-bottom: 70px;
}
.table {
width: 700px;
}
.danefaktury {
border-bottom-style: solid;
border-bottom-width: 1px;
border-bottom-color: black;
color:black;
}
h1 {
margin: 0px;
font-size: 25px;
font-weight: bold;
text-align: left;
color: #FF6600;
}
.pozycje {
border-style: solid;
border-width: 0px 0px 1px 0px;
border-color: black;
font-size: 12px;
color:black;
padding:5px;
}
</style>
</head>
<body>
<center>
<table class="table" cellpadding="0" cellspacing="0">
<xsl:apply-templates select="//faktura[@nr='75/FV/2006']"/>
<tr>
<td class="pozycje"></td>
<td class="pozycje"></td>
<td class="pozycje"></td>
<td class="pozycje"><xsl:text>Razem:</xsl:text></td>
<td class="pozycje"><xsl:value-of select="$cenaNetto"/></td>
</tr>
</table>
</center>
</body>
</html>
</xsl:template>
<xsl:template match="faktura">
<tr>
<td colspan="8" class="danefaktury">
<h1>
<xsl:text>Faktura VAT: </xsl:text>
<xsl:value-of select="@nr"/>
</h1>
<xsl:text>Data wystawienia: </xsl:text>
<xsl:value-of select="@datawystawienia"/>
<xsl:text> Data sprzedaży: </xsl:text>
<xsl:value-of select="@datasprzedazy"/>
</td>
</tr>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="sprzedawca">
<tr>
<td colspan="4" class="sprzedawca">
<strong><xsl:text>SPRZEDAWCA:</xsl:text></strong><br/>
<strong><xsl:text>NIP: </xsl:text></strong><xsl:value-of select="@nip"/><br/>
<xsl:apply-templates/>
</td>
<td colspan="4" class="sprzedawca">
<strong><xsl:text>NABYWCA:</xsl:text></strong><br/>
<strong><xsl:text>NIP: </xsl:text></strong><xsl:value-of select="../nabywca/@nip"/><br/>
<xsl:apply-templates select="../nabywca"/>
</td>
</tr>
</xsl:template>
<xsl:template match="nabywca">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="firma">
<strong><xsl:text>Nazwa firmy: </xsl:text></strong>
<xsl:value-of select="."/><br/>
</xsl:template>
<xsl:template match="adres">
<strong><xsl:text>Adres: </xsl:text></strong>
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="kod">
<xsl:text>, </xsl:text>
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="miejscowosc">
<strong><xsl:text> </xsl:text></strong>
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="pozycja">
<xsl:choose>
<xsl:when test=".=//pozycja[1]">
<tr>
<td class="pozycje"><strong><xsl:text>Pozycja:</xsl:text></strong></td>
<td class="pozycje"><strong><xsl:text>Ilość:</xsl:text></strong></td>
<td class="pozycje"><strong><xsl:text>J.m.:</xsl:text></strong></td>
<td class="pozycje"><strong><xsl:text>Cena J.:</xsl:text></strong></td>
<td class="pozycje"><strong><xsl:text>Netto::</xsl:text></strong></td>
<td class="pozycje"><strong><xsl:text>Brutto:</xsl:text></strong></td>
<td class="pozycje"><strong><xsl:text>Wartość podatku:</xsl:text></strong></td>
<td class="pozycje"><strong><xsl:text>VAT:</xsl:text></strong></td>
</tr>
<tr>
<xsl:apply-templates/>
</tr>
</xsl:when>
<xsl:otherwise>
<tr>
<xsl:apply-templates/>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="nazwa">
<td class="pozycje">
<xsl:number count="pozycja" format="1. "/>
<xsl:value-of select="."/>
</td>
</xsl:template>
<xsl:template match="ilosc">
<td class="pozycje">
<xsl:value-of select="."/>
</td>
<td class="pozycje">
<xsl:value-of select="@jm"/>
</td>
</xsl:template>
<xsl:template match="cenajednostkowa">
<td class="pozycje">
<xsl:value-of select="format-number(.,'#.00')"/>
</td>
<td class="pozycje">
<xsl:value-of select="format-number(.*../ilosc,'#.00')"/>
</td>
<xsl:choose>
<xsl:when test="../stawkaVAT !='zw' and ../stawkaVAT !=0">
<td class="pozycje">
<strong><xsl:value-of select="format-number(.*../ilosc*(1+(../stawkaVAT div 100)),'#.00')"/></strong>
</td>
<td class="pozycje">
<xsl:value-of select="format-number(.*(../stawkaVAT div 100)*../ilosc,'#.00')"/>
</td>
</xsl:when>
<xsl:otherwise>
<td class="pozycje">
<strong><xsl:value-of select="format-number(.*../ilosc,'#.00')"/></strong>
</td>
<td class="pozycje">
<xsl:value-of select="0.00"/>
</td>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="stawkaVAT">
<td class="pozycje">
<xsl:value-of select="."/>
</td>
</xsl:template>
</xsl:stylesheet>