Kalendarz w XSL

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?

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

1

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>

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