Kalendarz w XSL

Odpowiedz Nowy wątek
2017-05-20 17:10

Rejestracja: 4 lata temu

Ostatnio: 1 rok temu

0

Cześć,

Mam oto taki kod w C++ (jest to kalendarz, wypisany rekurencyjnie, zmienna start_day - odkąd zaczyna się miesiąc, zmienna days - liczba dni w miesiącu):


#include <iostream>

void Calendar(int start_day, int days)
{

    if (start_day >= 1 and days > 0)
    {
        Calendar(start_day, days-1);
        std::cout << "  " << days;

        if ((days+(start_day-1))%7==0)
        {
        std::cout << "\n";
        }

    }
    else if (start_day-1 > 0 and days == 0)
    {
        Calendar(start_day-1, 0);
        std::cout << "  " << "-";
    }

}

main()
{
    Calendar(2, 28);
    //Calendar(3, 31);
}

Teraz muszę to zapisać za pomocą XML + XSLT

Mój plik XML:


<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="application/xml" href="arkusz.xsl"?>
<kal>
<miesiac nazwa="maj" ile="30" pierwszy="2"/>
</kal>

Tutaj plik arkusz.xsl:


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:variable name="pierwszy" select="kal/miesiac/@pierwszy"/>
<xsl:variable name="ile" select="kal/miesiac/@ile"/>

<xsl:template match="/">
<html>
<body>
<xsl:call-template name="calendar"/>
</body>
</html>
</xsl:template>

<xsl:template name="calendar">

<xsl:param name="index" select="$pierwszy"/>

<xsl:if test="$index &lt; $ile+1">
<span><xsl:value-of select="$index"/></span>
<xsl:text> </xsl:text>
<xsl:if test="$index mod 7=0">
<html><body><br/></body></html>
</xsl:if>
<xsl:call-template name="calendar">
<xsl:with-param name="index" select="$index+1"/>
</xsl:call-template>

</xsl:if>

</xsl:template>

</xsl:stylesheet>

Niestety efekt nie do końca jest taki jakbym chciał. Nie ma "-" uzupełniających brak dnia w danym miesiącu... Czy ktoś mógłby mi pomóc z tym problemem?

Pozostało 580 znaków

2017-05-20 18:08

Rejestracja: 17 lat temu

Ostatnio: 15 godzin temu

1

Ale ty to musisz zrobić dokładnie tak jak w zaprezentowany kodzie?
Bo jesteś bardzo daleki od tego, zwróć uwagę że funkcja c++ dekrementuje, a ty inkrementujesz, dodatkowo operuje na 2 zmiennych a nie na jednej jak ty

Nie muszę się do tego odnosić. Chciałem tylko kodem C++ pokazać o co mi chodzi. Umiałbyś mi pomóc? - Skynet12 2017-05-20 18:49

Pozostało 580 znaków

2017-05-20 19:17

Rejestracja: 17 lat temu

Ostatnio: 15 godzin temu

Można tak:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:variable name="pierwszy" select="kal/miesiac/@pierwszy"/>
    <xsl:variable name="ile" select="kal/miesiac/@ile"/>

    <xsl:template match="/">
        <html>
            <body>
                <xsl:call-template name="calendar"/>
            </body>
        </html>
    </xsl:template>

    <xsl:template name="calendar">

        <xsl:param name="index" select="1"/>

        <xsl:if test="$index &lt; $ile+$pierwszy">
            <span>
                <xsl:choose>
                    <xsl:when test="$index &lt; $pierwszy">
                        -
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="$index - $pierwszy + 1"/>
                    </xsl:otherwise>
                </xsl:choose>
            </span>
            <xsl:text> </xsl:text>
            <xsl:if test="$index mod 7=0">
                <br/>
            </xsl:if>
            <xsl:call-template name="calendar">
                <xsl:with-param name="index" select="$index+1"/>
            </xsl:call-template>

        </xsl:if>

    </xsl:template>

</xsl:stylesheet>
Dziękuje bardzo. Nie wpadłbym na to :) - Skynet12 2017-05-20 19:22

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0