Avatar billede javanewbie11 Nybegynder
28. januar 2004 - 14:22 Der er 15 kommentarer og
1 løsning

PAging i xslt hvordan, fortsat?

Jeg har flg. xml struktur:

<artikel>
<afsnit>
  <overskrift/>
  <underoversrift/>
  <broedtekst>
  <liste>
    <item/>
    ...
  </liste>
  <billede/>
  </broedtekst>
<afsnit>
</artikel>

Jeg har så lavet flg. style:

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

<xsl:variable name="totalNumberOfPages">
<xsl:value-of select="count(artikel/afsnit)"/>
</xsl:variable>
<xsl:template match="/">
<html>
<head>
<title/>
<link rel="stylesheet" type="text/css" href="style1.css"/>
<xsl:call-template name="buildJavaScript"/>
</head>
<body>
<center>
<div align="center" class="boks">
<table border="0" cellspacing="0" cellpadding="2">
<tr>
<td width="735px" height="90px" colspan="3" class="BannerTD"/>
</tr>
<tr>
<td width="100%" height="15px" colspan="3" class="TDSmall">
<table align="right">
<tbody>
<tr>
<td>
<a href="#" class="SmallMenu">xxxx</a>           
</td>
<td>
<a href="#" class="SmallMenu"> Kontakt</a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<td width="140px" height="758px" valign="top" class="MenuTD">
<h5 align="center" class="menuCol">.:: MENU ::.</h5>
<a href="index.htm" class="menuLink">> Forside</a><br/>
<a href="#" class="menuLink">> Skoleprojekter</a><br/>
<a href="Synopser.htm" class="menuLink">> Synopser</a><br/>
<a href="#" class="menuLink">> Egne applikationer</a><br/>
<a href="Bogsalg.xml" class="menuLink">> Bogsalg</a><br/>
<a href="Links.xml" class="menuLink">> Links</a></td>
<td width="625px">
<h5 align="center">.:: APPLIKATIONER ::. <br/>
---------------------------------------------------------------------------
</h5>

<div id="currentPage" class="selosDiv">
<xsl:apply-templates/>
<xsl:call-template name="buildPaging">
<xsl:with-param name="currentPage">1</xsl:with-param>
</xsl:call-template>
</div>
</td>
</tr>
</table>
</div>
</center>
</body>
</html>
</xsl:template>
<xsl:template match="afsnit">
<xsl:variable name="currentPage"/>
<center>
<div id="page{position()}" style="display:none;">
<xsl:apply-templates select="overskrift"/>
<xsl:apply-templates select="overskrift2"/>
<xsl:apply-templates select="tekst"/>
</div>
</center>
</xsl:template>
<xsl:template match="overskrift">
<h3 align="center">
<xsl:value-of select="."/>
</h3>
</xsl:template>
<xsl:template match="overskrift2">
<h5 align="center">
<xsl:value-of select="."/>
</h5>
</xsl:template>
<xsl:template match="tekst">
<xsl:value-of select="."/>
<xsl:apply-templates select="liste"/>
<xsl:apply-templates select="billede"/>
</xsl:template>
<xsl:template match="liste">
<ol>
<xsl:for-each select="//item">
<li>
<xsl:value-of select="."/>
</li>
</xsl:for-each>
</ol>
</xsl:template>
<xsl:template match="billede">
<img  align="left" class="SelosPic">
<!-- Oprettes paa denne maade fordi der ikke kan staa < eller > inde i et tag. -->
<xsl:attribute name="src"><xsl:value-of select="text()"/></xsl:attribute>
<xsl:attribute name="width">300</xsl:attribute>
<xsl:attribute name="height">220</xsl:attribute>
</img>
</xsl:template>
<xsl:template name="buildPaging">
<xsl:param name="currentPage"/>
<xsl:if test="number( $currentPage ) &lt;= $totalNumberOfPages">
<a>
<xsl:attribute name="href">java script:void(0)</xsl:attribute>
<xsl:attribute name="onclick">showPage( <xsl:value-of select="$currentPage"/> );</xsl:attribute>
<xsl:value-of select="$currentPage"/>
</a>
<xsl:if test="number( $currentPage ) &lt; $totalNumberOfPages">
<xsl:text> | </xsl:text>
<xsl:call-template name="buildPaging">
<xsl:with-param name="currentPage">
<xsl:value-of select="number( $currentPage ) + 1"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:template>
<xsl:template name="buildJavaScript">
<script type="text/javascript" language="javascript">
<xsl:comment><![CDATA[
window.onload = init;
var objCurrentPage = null;
   
function init()
{
objCurrentPage = document.getElementById( "currentPage" );
showPage( 1 );
}

function showPage( intPageNumber )
{
var objNewPage = document.getElementById( "page" + intPageNumber );
objCurrentPage.innerHTML = objNewPage.innerHTML;
}
]]></xsl:comment>
</script>
</xsl:template>
</xsl:stylesheet>

Nogen der kan se hvorfor det ikke virker, den viser kun første afsnit og ikke nogle tal til at page. Den tæller formentlig forkert sammen?!

Hjæælp....
Avatar billede nute Nybegynder
28. januar 2004 - 14:41 #1
du er lidt galt på den i dine div's. Denne struktur:

<div id="currentPage" class="selosDiv">
<xsl:apply-templates/>
<xsl:call-template name="buildPaging">
<xsl:with-param name="currentPage">1</xsl:with-param>
</xsl:call-template>
</div>

skal se sådan ud:

<div id="currentPage" class="selosDiv"></div>
<xsl:apply-templates/>
<xsl:call-template name="buildPaging">
<xsl:with-param name="currentPage">1</xsl:with-param>
</xsl:call-template>

/nute
Avatar billede javanewbie11 Nybegynder
28. januar 2004 - 14:55 #2
ER ændret, men den finder stadig kun det første afsnit... Jeg kan simpelthen ikke se hvorfor?
Avatar billede nute Nybegynder
28. januar 2004 - 15:02 #3
jeg kopieret din xml, og lagde ind nogle flere <afsnit/> noder. Det eneste jeg ændret i din xml, var at afslutte dit <afsnit/> tag og fjerne '...' under <item/> ... det fungerer fint.

/nute
Avatar billede javanewbie11 Nybegynder
28. januar 2004 - 15:10 #4
Sådan ser mit xml dok. ud, det er måske her fejlen er?

<artikel>
<afsnit>
<overskrift>Selos</overskrift>
<overskrift2>Programmet det gør det nemmere og hurtigere, at administrere sine frimærkesamlinger på</overskrift2>
<tekst>
Dette produkt er udviklet med det formål at skulle fungere som et administrativt program til administrering af frimærkesamlinger.
Programmet åbner døre for en masse muligheder, som ikke kan løses lige så hurtigt og nemt på den ”gammeldags” måde med kartoteket.
Programmet er lavet så dynamisk så muligt, hvilket vil sige at det bl.a. er umådelig enkelt at videreudvikle på. Dette resulterer i, at Jeg som udvikler hurtigt     kan mødekomme brugernes behov i tilfælde af, at De mener, der mangler væsentlige detaljer indenfor fagområdet.
Produktet består af forskellige brugerscenarier, der alle vises visuelt for brugeren. De brugerscenarier der p.t. er tilgængelige er:
<liste>
<item>Man kan oprette en ny samling.</item>
<item>Man kan gemme, redigere og slette frimærke og breve fra ens samlinger.</item>
<item>Man kan udskrive et frimærke/brev med tilhørende informationer og billede.</item>
<item>Der er implementeret en regnskabsfunktion, så brugeren kan beregne den samlede værdi af sin samling eller sine samlinger.</item>
<item>Der er mulighed for at tilknytte et frimærke til de breve, man besidder med dette på.</item>
<item>Der er en zoom-funktion på billederne af ens frimærker og breve.</item>
<item>Effektiv søgefunktion til både udgivelsesåret og hele eller dele af ord/tal, der indgår i katalognr. og beskrivelse for et eller flere frimærke(r)/bre(e).</item>
</liste>
</tekst>
<tekst>
Herunder kan ses ”skærmdumps” med tilhørende kommentarer af nogle af de forskellige grafiske brugergrænseflader i Selos:
<billede>SelosPics/Hovedmenu.png</billede>
</tekst>
</afsnit>
<afsnit>
<tekst>
Billedet til venstre viser startsiden, hvor man har mulighed for at oprette nye samlinger og vælge en eksisterende samling, man vil arbejde videre på.
<billede>SelosPics/frim.png</billede>
Billedet til venstre viser det skærmbillede brugeren vil se, når han har valgt sin samling og klikket på menupunktet ’frimærker’.
På denne grænseflade er det muligt for brugeren at udføre de administrative opgaver, der er tilknyttet ens frimærker.
<billede>SelosPics/brevliste.png</billede>
Dette skærmbillede knytter sig til det forrige.
Dette skærmbillede viser, hvad brugeren vil få at se, når han klikker på knappen ’brevliste’. Her vises der et nyt skærmbillede med alle de breve man har, hvor det valgte frimærke sidder på.
<billede>SelosPics/breve.png</billede>
Skærmbillede viser den grafiske brugergrænsefladen for administrationen af sine breve. Den har næsten de samme funktionaliteter som de foregående skærmbilleder.
Som afrunding vil jeg tilføje, at programmet er udviklet til .NET platformen med C# som programmeringssprog, hvilket betyder at der er krav for at kunne afvikle programmet.
Ønsker De nærmere oplysninger om mulighederne for at få fingre i programmet eller bare har spørgsmål vedr. det, er De yderst velkommen til at sende mig en mail på: <mail>daniel@theemann.dk.</mail>
</tekst>
</afsnit>
</artikel>
Avatar billede javanewbie11 Nybegynder
28. januar 2004 - 15:14 #5
/dkt
Avatar billede nute Nybegynder
28. januar 2004 - 15:15 #6
fungerer "fint" for mig. det er noget mærkelig med dine billeder, men pagingen fungerer fint

/nute
Avatar billede javanewbie11 Nybegynder
28. januar 2004 - 15:17 #7
Kan du ikke sende de 2 filer, som der fungerer fint for dig?

/dkt
Avatar billede nute Nybegynder
28. januar 2004 - 15:18 #8
du bruger den samme XML ... XSL'en er her:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:variable name="totalNumberOfPages">
        <xsl:value-of select="count(artikel/afsnit)"/>
    </xsl:variable>
    <xsl:template match="/">
        <html>
            <head>
                <title/>
                <link rel="stylesheet" type="text/css" href="style1.css"/>
                <xsl:call-template name="buildJavaScript"/>
            </head>
            <body>
                <center>
                    <div align="center" class="boks">
                        <table border="0" cellspacing="0" cellpadding="2">
                            <tr>
                                <td width="735px" height="90px" colspan="3" class="BannerTD"/>
                            </tr>
                            <tr>
                                <td width="100%" height="15px" colspan="3" class="TDSmall">
                                    <table align="right">
                                        <tbody>
                                            <tr>
                                                <td>
                                                    <a href="#" class="SmallMenu">xxxx</a>
                                                </td>
                                                <td>
                                                    <a href="#" class="SmallMenu"> Kontakt</a>
                                                </td>
                                            </tr>
                                        </tbody>
                                    </table>
                                </td>
                            </tr>
                            <tr>
                                <td width="140px" height="758px" valign="top" class="MenuTD">
                                    <h5 align="center" class="menuCol">.:: MENU ::.</h5>
                                    <a href="index.htm" class="menuLink">> Forside</a>
                                    <br/>
                                    <a href="#" class="menuLink">> Skoleprojekter</a>
                                    <br/>
                                    <a href="Synopser.htm" class="menuLink">> Synopser</a>
                                    <br/>
                                    <a href="#" class="menuLink">> Egne applikationer</a>
                                    <br/>
                                    <a href="Bogsalg.xml" class="menuLink">> Bogsalg</a>
                                    <br/>
                                    <a href="Links.xml" class="menuLink">> Links</a>
                                </td>
                                <td width="625px">
                                    <h5 align="center">.:: APPLIKATIONER ::. <br/>
---------------------------------------------------------------------------
</h5>
                                    <div id="currentPage" class="selosDiv"></div>
                                        <xsl:apply-templates/>
                                        <xsl:call-template name="buildPaging">
                                            <xsl:with-param name="currentPage">1</xsl:with-param>
                                        </xsl:call-template>
                                   
                                </td>
                            </tr>
                        </table>
                    </div>
                </center>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="afsnit">
        <xsl:variable name="currentPage"/>
        <center>
            <div id="page{position()}" style="display:none;">
                <xsl:apply-templates select="overskrift"/>
                <xsl:apply-templates select="overskrift2"/>
                <xsl:apply-templates select="tekst"/>
            </div>
        </center>
    </xsl:template>
    <xsl:template match="overskrift">
        <h3 align="center">
            <xsl:value-of select="."/>
        </h3>
    </xsl:template>
    <xsl:template match="overskrift2">
        <h5 align="center">
            <xsl:value-of select="."/>
        </h5>
    </xsl:template>
    <xsl:template match="tekst">
        <xsl:value-of select="."/>
        <xsl:apply-templates select="liste"/>
        <xsl:apply-templates select="billede"/>
    </xsl:template>
    <xsl:template match="liste">
        <ol>
            <xsl:for-each select="//item">
                <li>
                    <xsl:value-of select="."/>
                </li>
            </xsl:for-each>
        </ol>
    </xsl:template>
    <xsl:template match="billede">
        <img align="left" class="SelosPic">
            <!-- Oprettes paa denne maade fordi der ikke kan staa < eller > inde i et tag. -->
            <xsl:attribute name="src"><xsl:value-of select="text()"/></xsl:attribute>
            <xsl:attribute name="width">300</xsl:attribute>
            <xsl:attribute name="height">220</xsl:attribute>
        </img>
    </xsl:template>
    <xsl:template name="buildPaging">
        <xsl:param name="currentPage"/>
        <xsl:if test="number( $currentPage ) &lt;= $totalNumberOfPages">
            <a>
                <xsl:attribute name="href">java script:void(0)</xsl:attribute>
                <xsl:attribute name="onclick">showPage( <xsl:value-of select="$currentPage"/> );</xsl:attribute>
                <xsl:value-of select="$currentPage"/>
            </a>
            <xsl:if test="number( $currentPage ) &lt; $totalNumberOfPages">
                <xsl:text> | </xsl:text>
                <xsl:call-template name="buildPaging">
                    <xsl:with-param name="currentPage">
                        <xsl:value-of select="number( $currentPage ) + 1"/>
                    </xsl:with-param>
                </xsl:call-template>
            </xsl:if>
        </xsl:if>
    </xsl:template>
    <xsl:template name="buildJavaScript">
        <script type="text/javascript" language="javascript">
            <xsl:comment><![CDATA[
window.onload = init;
var objCurrentPage = null;
   
function init()
{
objCurrentPage = document.getElementById( "currentPage" );
showPage( 1 );
}

function showPage( intPageNumber )
{
var objNewPage = document.getElementById( "page" + intPageNumber );
objCurrentPage.innerHTML = objNewPage.innerHTML;
}
]]></xsl:comment>
        </script>
    </xsl:template>
</xsl:stylesheet>

/nute
Avatar billede javanewbie11 Nybegynder
28. januar 2004 - 15:22 #9
daniel@theemann.dk

/dkt
Avatar billede javanewbie11 Nybegynder
28. januar 2004 - 16:01 #10
Tak for hjælpen, fejlen lå i stylesheet'et.

Er der ikke en smart måde at lave afsnit/liniskift på xsl?
Avatar billede nute Nybegynder
28. januar 2004 - 16:05 #11
det kommer an på hvilken XML/XSL editor du benytter. De fleste XML editorer har en "pretty print" funktion som laver XML og XSL overskueligt

/nute
Avatar billede javanewbie11 Nybegynder
28. januar 2004 - 16:13 #12
Jeg tænker når, det kommer ud på hjemmeside som html...
Avatar billede nute Nybegynder
28. januar 2004 - 16:25 #13
ah ... jammen så skal du jo bare sætte ind en <br/> eller <p/> :-)

/nute
Avatar billede nute Nybegynder
15. marts 2004 - 09:59 #14
du kan jo også sætte:

<xsl:output indent="yes"/>

i toppen af dit stylesheet

/nute
Avatar billede javanewbie11 Nybegynder
07. april 2004 - 12:47 #15
Takker ;)
Avatar billede nute Nybegynder
07. april 2004 - 12:51 #16
selv tak :o]
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester