[XML/XSL] Hoe lees ik een attribuut uit?

Pagina: 1
Acties:

  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06-2025

Gerwin

Ik ben er klaar voor!

Topicstarter
Hallo, ik ben bezig om een pagina te maken met veel links, dit wil ik doen doormiddel van XML met een structuur met de volgende indeling:
code:
1
2
3
4
5
6
7
<?xml version="1.0" encoding="ISO-8859-1"?>

<PAGE>
<LINK location="http://www.geocities.com/Area51/Rampart/4537/st10late.html" extension="tip">New Star Trek series V news</LINK> 
<LINK location="http://www.greatlink.org">The Great Link</LINK> 
<LINK location="http://www.section31.com" extension="tip">Section 31</LINK>
</PAGE>

ik heb het volgende in de xls staan:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0"?>
<HTML xmlns:xsl="http://www.w3.org/TR/WD-xsl">
  <BODY STYLE="font-family:Arial, helvetica, sans-serif; font-size:12pt;
  background-color:#EEEEEE">
    <xsl:for-each select="page">
<xsl:element name="a">
     <xsl:attribute name="href">
    <xsl:value-of select="link" />
     </xsl:attribute>
     <xsl:value-of select="location" />
</xsl:element><br />
    </xsl:for-each>
  </BODY>
</HTML>

Probleem is nu: hoe lees in de attribuut uit. Ik dacht eerst dat het ietsvan link.location was of link(location), maar dit is het niet. Wat wel?

Station van Gerwin Prins op Apple Music


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik zou even iets meer tikken en de normale stylesheet syntax gebruiken met templates. Dat is een stuk duidelijker naar mijn mening :) .

Als je een template schrijft met een XPath expressie dan kan je in een template een xsl:value-of elementen op nemen. Deze krijgt weer een select attribuut, wat ook een XPath expressie is. Je kunt hierin naar een attribuut verwijzen door er een @ voor te zetten.

Zie ook mijn bookmark-systeem wat ik gebruik:
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
<?xml version="1.0"?>

<?xml-stylesheet type="text/xsl" href="bookmarks.xsl" ?>

<root>
    <category name="documentatie">
        <category name="xml">     
        <link name="XSLT Reference"  url="file:///home/martin/documentation/xml/xsl/xslt/zvon-reference/Output/index.html"/>
        <link name="XHTML Reference" url="file:///home/martin/documentation/xml/xhtml/zvon-reference/Output/index.html"/>
        <link name="CSS2 Reference"  url="file:///home/martin/documentation/xml/css2/zvon-reference/Output/index.html"/>
      </category>
        <category name="java">    
        <link name="Jasmin User Guide" url="file:///usr/local/java/jasmin-1.06/doc/guide.html"/>
        <link name="1.4.0 beta 3 API docs" url="file:///usr/java/j2sdk1.4.0/docs/api/index.html"/>
      </category>
    </category>

    <category name="fora">
        <category name="Gathering of Tweakers">
         <link name="Webdesign &amp; Graphics"   url="http://gathering.tweakers.net/listtopics/13"/>
         <link name="Programming &amp; Webscripting" url="http://gathering.tweakers.net/listtopics/14"/>
         <link name="Lieve Adjes"             url="http://gathering.tweakers.net/listtopics/15"/>
         <link name="Stoute Usertjes"           url="http://gathering.tweakers.net/listtopics/26"/>
      </category>

        <link name="Javahova Active Topics"   url="http://forum.javahova.net/misc.php?action=active"/>
    </category>

    <category name="nieuws">
        <link name="tweakers" url="http://www.tweakers.net"/>
        <link name="Slashdot" url="http://www.slashdot.org"/>
        <category name="java">
        <link name="javalobby" url="http://www.javalobby.org"/>
        <link name="jsurfer" url="http://www.jsurfer.org"/>
        <link name="IBM/Java" url="http://www.java.ibm.com"/>
        <link name="Sun/Java" url="http://java.sun.com"/>
        <link name="javaworld" url="http://www.javaworld.com"/>
       </category>
    </category>
</root>

Dit transformeer ik met deze stylesheet:
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
<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml" indent="yes"/>

    <xsl:template match="root">
        <html>
            <head>
                <title>Bookmarks of Martin Bravenboer</title>
            </head>

            <body>
                <h1>My bookmarks</h1>

                <ul>
                    <xsl:apply-templates/>
                </ul>
            </body>
        </html>
    </xsl:template>

    <xsl:template match="link">
        <li>
            <a href="{@url}" alt="{@name}">
                <xsl:value-of select="@name"/>
            </a>
        </li>
    </xsl:template>

    <xsl:template match="category">
        <li>
        <p>
            <xsl:value-of select="@name"/>:
                <ul>
                    <xsl:apply-templates/>
                </ul>
        </p>
        </li>
    </xsl:template>
</xsl:stylesheet>

Je ziet dat ik hier regelmatig de @ gebruik, en ook dat de stylesheet heel duidelijk is omdat ik zwaar gebruik maak van de recursieve werking van XSLT :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Allereerst, het is XSL en niet XLS ;)

Ik zou de link ook fraaier in je xml zetten. Bijvoorbeeld
code:
1
2
3
4
5
<link>
  <location>http://www.geocities.com/Area51/Rampart/4537/st10late.html</location>
  <name>New Star Trek series V news</name>
  <extension>tip</extension>
</link>

ooh kijk nu is je attribuut probleem ook opgelost :D :P

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Je kunt trouwens op deze site een <big>zeer</big> goede tutorial voor XSLT vinden. Als je die even rustig doorwerkt wordt alles al snel een stuk duidelijker :) .

Site: www.xfront.com
Directe link: www.xfront.com/xsl.zip

Zeer de moeite waard!

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Orphix: Ik zou de link ook fraaier in je xml zetten.
Daar heeft Orphix wel gelijk in. Zeker omdat je ook al in de richting van extensions en dergelijke gaat, is een betere structuur absoluut niet verkeerd. Tip zou hierbij overigens ook nog structuur kunnen zijn.

In mijn bookmark voorbeeld was ik ook een beetje lui ;)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Gerwin
  • Registratie: Juli 2001
  • Laatst online: 08-06-2025

Gerwin

Ik ben er klaar voor!

Topicstarter
mbravenboer met z'n bookmarks voorbeeld
Aha, inderdaad... dus zo gaat dat in z'n werk. Heel erg bedankt. Ik zat duidelijk op een iets te ingewikkeld en ander spoor te denken dan dat ik moest wezen :). Nogmaals erg bedankt. :)
Orphix-anti-attribuut
Je hebt gelijk, maar daarmee heb ik niet echt een goed overzicht in die XML file. En de attributen van de link hebben toch echt iets direct met de link te maken.
mbravenboer tipte xfront
Ga ik zeker even doen... erg bedankt!

edit: heb even je zeer ruime quotes uitgedund ;) .

Station van Gerwin Prins op Apple Music


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
GerwinPrins: Nogmaals erg bedankt. :)
Graag gedaan :) .

Ik zou echt even goed proberen om van de werkwijze met for-each en dergelijke af te stappen. Je ziet veel mensen die vanuit een imperatieve taal (Java/PHP/C++/VB etc) met XSLT gaan werken dit doen. Dit is echter vaak absoluut niet de prettigste manier :) . Lekker je complexiteit verdelen over meerdere templates en de recursie van XSLT optimaal benutten werkt stukken makkelijker :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1