Toon posts:

[XSL/XML] For-each lusje gaat niet goed.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allemaal,

Ik ben bezig met xsl en xml maar het lukt me niet om een loopje door alle menu items te maken. Ik heb dit geprobeert:

De XSL:
code:
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
<?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" encoding="utf-8"/>

<xsl:template match="Site">
<HTML>
<HEAD>
    <TITLE>
        Welkom bij de website van <xsl:value-of select="Bedrijf"/>
    </TITLE>
    <LINK REL="stylesheet" TYPE="text/css" HREF="style.css"/>
    
</HEAD>

<BODY STYLE="margin-top: -0; margin-left: -0; margin-right: -0; margin-bottom: 0; height: 100%; width: 100%">

<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" HEIGHT="100%">
    <TR>
        <TD COLSPAN="2" BGCOLOR="#000000" BACKGROUND="images/back03.jpg" HEIGHT="50">
            | 
            <xsl:for-each select="Menu">
                <A CLASS="DesignMenu" TARGET="main">
                    <xsl:attribute name="href">
                        <xsl:value-of select="Url"/>
                    </xsl:attribute>
                    <xsl:value-of select="Naam"/>
                </A> 
                 | 
            </xsl:for-each>
             |
        </TD>
    </TR>
    <TR>
        <TD WIDTH="100%" HEIGHTt="100%">
            <IFRAME SCROLLING="Auto" HEIGHT="100%" WIDTH="100%" NAME="main"/>
        </TD>
        <TD WIDTH="260" BGCOLOR="#000000">
            [img]"images/beeld01.jpg"/>
        </TD>
    </TR>
    <TR>
        <TD[/img]
            <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" HEIGHT="45">
                <TR>
                    <TD HEIGHT="3" WIDTH="150" BGCOLOR="#840017"></TD>
                    <TD HEIGHT="3" BGCOLOR="#000000"></TD>
                </TR>
                <TR>
                    <TD HEIGHT="2" WIDTH="150" BGCOLOR="#000000"></TD>
                    <TD HEIGHT="2" BGCOLOR="#840017"></TD>
                </TR>
                <TR>
                    <TD HEIGHT="40" WIDTH="150" BGCOLOR="#840017"> </TD>
                    <TD HEIGHT="40" BGCOLOR="#000000"> </TD>
                </TR>
            </TABLE>
        </TD>
    </TR>
</TABLE>

</BODY>
</HTML>

</xsl:template>
</xsl:stylesheet>

De XML:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  <?xml version="1.0" ?> 
- <Site>
      <Bedrijf>Test Site</Bedrijf> 
    <Trefwoorden>Foo</Trefwoorden> 
    <Beschrijving>Bar</Beschrijving> 
    - <Menu>
        - <Item>
          <Naam>Home</Naam> 
          <Url>Link..</Url> 
        </Item>
        - <Item>
          <Naam>Nieuws</Naam> 
          <Url>Link..</Url> 
        </Item>
        - <Item>
          <Naam>Producten</Naam> 
          <Url>Link..</Url> 
        </Item>
        - <Item>
          <Naam>Contact</Naam> 
          <Url>Link..</Url> 
        </Item>
    </Menu>
  </Site>

Het probleem is dat de menu items niet door de for-each lus gaan. Iemand een idee wat ik fout doe?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Hmmm...

Je loopt door het menu heen..... en niet door de menu items
code:
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
<?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" encoding="utf-8"/>
<xsl:template match="Site">
<HTML>
<HEAD>
    <TITLE>Welkom bij de website van <xsl:value-of select="Bedrijf"/></TITLE>
    <LINK REL="stylesheet" TYPE="text/css" HREF="style.css"/>
</HEAD>
<BODY STYLE="margin-top: -0; margin-left: -0; margin-right: -0; margin-bottom: 0; height: 100%; width: 100%">
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" HEIGHT="100%">
    <TR>
        <TD COLSPAN="2" BGCOLOR="#000000" BACKGROUND="images/back03.jpg" HEIGHT="50">
            | 
            <xsl:for-each select="Menu/Item">
                <A CLASS="DesignMenu" TARGET="main">
                    <xsl:attribute name="href">
                        <xsl:value-of select="Url"/>
                    </xsl:attribute>
                    <xsl:value-of select="Naam"/>
                </A> 
                 | 
            </xsl:for-each>
             |
        </TD>
    </TR>
    <TR>
        <TD WIDTH="100%" HEIGHTt="100%">
            <IFRAME SCROLLING="Auto" HEIGHT="100%" WIDTH="100%" NAME="main"/>
        </TD>
        <TD WIDTH="260" BGCOLOR="#000000">
            [img]"images/beeld01.jpg"[/img]
        </TD>
    </TR>
    <TR>
        <TD COLSPAN="2" HEIGHT="45">
            <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" HEIGHT="45">
                <TR>
                    <TD HEIGHT="3" WIDTH="150" BGCOLOR="#840017"> </TD>
                    <TD HEIGHT="3" BGCOLOR="#000000"> </TD>
                </TR>
                <TR>
                    <TD HEIGHT="2" WIDTH="150" BGCOLOR="#000000"> </TD>
                    <TD HEIGHT="2" BGCOLOR="#840017"> </TD>
                </TR>
                <TR>
                    <TD HEIGHT="40" WIDTH="150" BGCOLOR="#840017"> </TD>
                    <TD HEIGHT="40" BGCOLOR="#000000"> </TD>
                </TR>
            </TABLE>
        </TD>
    </TR>
</TABLE>
</BODY>
</HTML>
</xsl:template>
</xsl:stylesheet>

En waarom gebruik je geen apply-templates? dat is op zich makkelijker en zeker overzichterlijker.

edit:

Hij is aangepast en zou nu gewoon moeten werken.

Programmer - an organism that turns coffee into software.


Verwijderd

Topicstarter
Thanx het werkt! Stom dat ik het niet zag. apply-template snap ik nog niet helemaal, ben maar nog net begonnen met XSL maar het werkt nu perfect!

Verwijderd

Met templates is het simpeler en mooier op te lossen:
code:
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
<?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" encoding="utf-8"/>
<xsl:template match="Site">
<HTML>
<HEAD>
    <TITLE>Welkom bij de website van <xsl:value-of select="Bedrijf"/></TITLE>
    <LINK REL="stylesheet" TYPE="text/css" HREF="style.css"/>
</HEAD>
<BODY STYLE="margin-top: -0; margin-left: -0; margin-right: -0; margin-bottom: 0; height: 100%; width: 100%">
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" HEIGHT="100%">
    <TR>
        <TD COLSPAN="2" BGCOLOR="#000000" BACKGROUND="images/back03.jpg" HEIGHT="50">
            | <xsl:apply-templates select"Menu">
             |
        </TD>
    </TR>
    <TR>
        <TD WIDTH="100%" HEIGHTt="100%">
            <IFRAME SCROLLING="Auto" HEIGHT="100%" WIDTH="100%" NAME="main"/>
        </TD>
        <TD WIDTH="260" BGCOLOR="#000000">
            [img]"images/beeld01.jpg"[/img]
        </TD>
    </TR>
    <TR>
        <TD COLSPAN="2" HEIGHT="45">
            <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" HEIGHT="45">
                <TR>
                    <TD HEIGHT="3" WIDTH="150" BGCOLOR="#840017"> </TD>
                    <TD HEIGHT="3" BGCOLOR="#000000"> </TD>
                </TR>
                <TR>
                    <TD HEIGHT="2" WIDTH="150" BGCOLOR="#000000"> </TD>
                    <TD HEIGHT="2" BGCOLOR="#840017"> </TD>
                </TR>
                <TR>
                    <TD HEIGHT="40" WIDTH="150" BGCOLOR="#840017"> </TD>
                    <TD HEIGHT="40" BGCOLOR="#000000"> </TD>
                </TR>
            </TABLE>
        </TD>
    </TR>
</TABLE>
</BODY>
</HTML>
</xsl:template>

<xsl:template match="Menu">
  <xsl:apply-templates select="Item">
</xsl:template>

<xsl:template match="Item">
  <A CLASS="DesignMenu" TARGET="main">
    <xsl:attribute name="href">
    <xsl:value-of select="Url"/>
    </xsl:attribute>
  <xsl:value-of select="Naam"/>
  </A> 
   | 
</xsl:template>

</xsl:stylesheet>

Toch veel mooier :), wel ietsje langer, maar hopelijk wel duidelijker...

Ik heb dit niet getest, maar ik verwacht dat het wel zou werken :).

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

code:
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
<?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" encoding="utf-8"/>
<xsl:template match="Site">
<HTML>
<HEAD>
    <TITLE>Welkom bij de website van <xsl:value-of select="Bedrijf"/></TITLE>
    <LINK REL="stylesheet" TYPE="text/css" HREF="style.css"/>
</HEAD>
<BODY STYLE="margin-top: -0; margin-left: -0; margin-right: -0; margin-bottom: 0; height: 100%; width: 100%">
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" HEIGHT="100%">
    <TR>
        <TD COLSPAN="2" BGCOLOR="#000000" BACKGROUND="images/back03.jpg" HEIGHT="50">
            | 
            <xsl:apply-templates />
             |
        </TD>
    </TR>
    <TR>
        <TD WIDTH="100%" HEIGHTt="100%">
            <IFRAME SCROLLING="Auto" HEIGHT="100%" WIDTH="100%" NAME="main"/>
        </TD>
        <TD WIDTH="260" BGCOLOR="#000000">
            [img]"images/beeld01.jpg"[/img]
        </TD>
    </TR>
    <TR>
        <TD COLSPAN="2" HEIGHT="45">
            <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" HEIGHT="45">
                <TR>
                    <TD HEIGHT="3" WIDTH="150" BGCOLOR="#840017"> </TD>
                    <TD HEIGHT="3" BGCOLOR="#000000"> </TD>
                </TR>
                <TR>
                    <TD HEIGHT="2" WIDTH="150" BGCOLOR="#000000"> </TD>
                    <TD HEIGHT="2" BGCOLOR="#840017"> </TD>
                </TR>
                <TR>
                    <TD HEIGHT="40" WIDTH="150" BGCOLOR="#840017"> </TD>
                    <TD HEIGHT="40" BGCOLOR="#000000"> </TD>
                </TR>
            </TABLE>
        </TD>
    </TR>
</TABLE>
</BODY>
</HTML>
</xsl:template>

<xsl:template match="Menu/Item">
                <A CLASS="DesignMenu" TARGET="main">
                    <xsl:attribute name="href">
                        <xsl:value-of select="Url"/>
                    </xsl:attribute>
                    <xsl:value-of select="Naam"/>
                </A>
             | 
</xsl:template>
</xsl:stylesheet>

En nu met apply-templates

Programmer - an organism that turns coffee into software.


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op zaterdag 09 maart 2002 12:02 schreef KoenM het volgende:
hier stond een XSL-template
Na testen 3 fouten: gecorrigeerd hier onder.
code:
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
<?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" encoding="utf-8"/>
<xsl:template match="Site">
<HTML>
<HEAD>
    <TITLE>Welkom bij de website van <xsl:value-of select="Bedrijf"/></TITLE>
    <LINK REL="stylesheet" TYPE="text/css" HREF="style.css"/>
</HEAD>
<BODY STYLE="margin-top: -0; margin-left: -0; margin-right: -0; margin-bottom: 0; height: 100%; width: 100%">
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" HEIGHT="100%">
    <TR>
        <TD COLSPAN="2" BGCOLOR="#000000" BACKGROUND="images/back03.jpg" HEIGHT="50">
            | <xsl:apply-templates select="Menu" />
             |
        </TD>
    </TR>
    <TR>
        <TD WIDTH="100%" HEIGHTt="100%">
            <IFRAME SCROLLING="Auto" HEIGHT="100%" WIDTH="100%" NAME="main"/>
        </TD>
        <TD WIDTH="260" BGCOLOR="#000000">
            [img]"images/beeld01.jpg"[/img]
        </TD>
    </TR>
    <TR>
        <TD COLSPAN="2" HEIGHT="45">
            <TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="100%" HEIGHT="45">
                <TR>
                    <TD HEIGHT="3" WIDTH="150" BGCOLOR="#840017"> </TD>
                    <TD HEIGHT="3" BGCOLOR="#000000"> </TD>
                </TR>
                <TR>
                    <TD HEIGHT="2" WIDTH="150" BGCOLOR="#000000"> </TD>
                    <TD HEIGHT="2" BGCOLOR="#840017"> </TD>
                </TR>
                <TR>
                    <TD HEIGHT="40" WIDTH="150" BGCOLOR="#840017"> </TD>
                    <TD HEIGHT="40" BGCOLOR="#000000"> </TD>
                </TR>
            </TABLE>
        </TD>
    </TR>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="Menu">
  <xsl:apply-templates select="Item" />
</xsl:template>

<xsl:template match="Item">
  <A CLASS="DesignMenu" TARGET="main">
    <xsl:attribute name="href">
    <xsl:value-of select="Url"/>
    </xsl:attribute>
  <xsl:value-of select="Naam"/>
  </A> 
   | 
</xsl:template>

</xsl:stylesheet>

En ja deze is eigenlijk mooier

Programmer - an organism that turns coffee into software.


Verwijderd

Op zaterdag 09 maart 2002 12:07 schreef LuCarD het volgende:

[..]

Na testen 3 fouten: gecorrigeerd hier onder.
Lekker lay-out vernielend topic :P.

Maar wat waren de fouten precies? Ik kan niet zoveel verschillen ontdekken :?

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Op zaterdag 09 maart 2002 12:13 schreef KoenM het volgende:

[..]

Lekker lay-out vernielend topic :P.

Maar wat waren de fouten precies? Ik kan niet zoveel verschillen ontdekken :?
<xsl:apply-templates select="Menu" />
en
<xsl:apply-templates select="Item" />

edit:

Hmmm vaag hij maakt een = teken niet bold?

Je was in de eerste regel ook een = vergeten

Programmer - an organism that turns coffee into software.


Verwijderd

ahhh, ach ja, de details ;) Maar bedankt voor het erop wijzen :).

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Op zaterdag 09 maart 2002 12:13 schreef KoenM het volgende:
Lekker lay-out vernielend topic :P.
Da's altijd zo met xsl topics :P

Ter bevordering van de leesbaarheid zou ik je trouwens aanraden om tags in kleine letters te schrijven. 't is geen regel, maar de meeste mensen vinden het wat makkelijker lezen ;)
Pagina: 1