Toon posts:

[XSL] XML bestand doorlopen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een XML bestand met de volgende structuur:

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
<klanten>
    <klant>
        <naam></naam>
        <adres></adres>
        <order>
            <artikel></artikel>
            <aantal></aantal>
            <prijs></prijs>
        </order>
        <order>
            <artikel></artikel>
            <aantal></aantal>
            <prijs></prijs>
        </order>
        <order>
            <artikel></artikel>
            <aantal></aantal>
            <prijs></prijs>
        </order>
    </klant>
    <klant>
        <naam></naam>
        <adres></adres>
        <order>
            <artikel></artikel>
            <aantal></aantal>
            <prijs></prijs>
        </order>
    </klant>
</klanten>


Nu wil ik de gegevens uit het XML bestand halen. Op elke pagina komen de gegevens van 1 klant, zie onderstaande voorbeeld:

code:
1
2
3
4
5
naam
adres

artikel     aantal     prijs
artikel     aantal     prijs


Op de volgende pagina wil ik dan de gegevens van de volgende klant afdrukken:

code:
1
2
3
4
5
6
7
8
naam
adres

artikel     aantal     prijs
artikel     aantal     prijs
artikel     aantal     prijs
artikel     aantal     prijs
artikel     aantal     prijs


Het is mij echter duidelijk hoe ik dit kan doen.

Ik heb nu onderstaande code, echter ik weet niet hoe ik 1 voor 1 de klanten kan verwerken.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<xsl:for-each select="klanten/klant">
    <xsl:choose>
        <xsl:when test="naam;'?????'">  <--- ???????????
                <xsl:value-of select="naam"/> -
                  <xsl:value-of select="adres"/> -
                  <xsl:for-each select="order">
                    <fo:block>
                            <xsl:value-of select="artikel"/> -
                            <xsl:value-of select="aantal"/> -
                            <xsl:value-of select="prijs"/> -
                        </fo:block>
                    </xsl:for-each>
            </xsl:when>
    </xsl:choose>
</xsl:for-each>


Of moet ik iedere klant een nummer geven en dan een soort "for loopje" doen?

Kan iemand mij helpen?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Allereerst: het is wel handig als je even duidelijk aangeeft waarnaar je transformeert ;) . Ik zag ergens nog net wat XSL-FO staan, maar over het algemeen transformeert men vaak naar XHTML, dus zo voor de hand liggend is dat niet ;) .

Je wilt elke klant op 1 pagina hebben... Waarom denk je dan dat je een klant met een bepaalde naam moet hebben? Ik denk dat je hele manier van denken over XSLT nog niet zo goed is. Ik zie dat met name aan het vele gebruik van for-each en je for-loop suggestie.

Je moet proberen met meerdere templates te gaan werken en deze templates toe te passen op je XML content. Je hele transformatie moet opgezet zijn rond templates en het aanroepen van deze templates (apply-templates) op XML knopen.

Daarnaast moet je eerst eens goed bedenken waarnaar je wilt transformeren. Dit zal je altijd moeten besluiten voordat je uberhaupt kan gaan transformeren. Je geeft aan dat je elke klant op een pagina wilt hebben. Als je een template schrijft voor een klant en in dit template een pagina produceert in XSL-FO ben je er al :) . Ik ben niet echt een enorme FO kenner, maar ik vermoed dat je als je voor elke klant een page-sequence genereert, het zaakje netjes per pagina wordt gezet. Het komt eigenlijk overeen met een soort hoofdstukken.

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


Verwijderd

Topicstarter
Ik gebruik FOP (zien mijn thread over FOP) dus gebruik in mijn XSL bestand xsl:fo opmaak code.

Heb je misschien een boeken tip mbt deze materie.

Ik zal nog eens wat gaan code tikken en wat dingen proberen, moet zeggen dat ik XML, XSL, XSL:FO best ingewikeld vind.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
vandenfire: Heb je misschien een boeken tip mbt deze materie.
Ik kan je eerlijk gezegd zo geen subliem boek tippen. Wel is er een hele goede tutorial online te vinden op http://www.xfront.com (zie uiteraard XSLT tutorial). Met deze tutorial ben ik zelf begonnen met XSLT en daarna heb ik eigenlijk niet meer gebruikt dan af en toe wat nazoeken in de standaarden en references.
moet zeggen dat ik XML, XSL, XSL:FO best ingewikeld vind.
Dat kan ik me goed voorstellen: het zijn alle drie technieken waarvoor je wel wat kennis in huis moet hebben. XSLT vereist een denkwijze die lastig aan te wennen is voor mensen die alleen maar in imperatieve talen hebben leren programmeren. Daarnaast is XSL-FO ook niet echt gemakkelijk (zelf beheers ik het nauwelijks omdat ik er vrijwel niets mee doe).

De meeste mensen beginnen eerst met wat transformaties naar XHTML. Is het misschien niet handig om daar eens een paar oefeningen mee te doen? Het voordeel is dat je je dan puur op XSLT kan concentreren, zonder lastig te worden gevallen met XSL-FO geneuzel :) .

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


Verwijderd

Topicstarter
mbravenboer schreef op 16 February 2003 @ 18:09:
[...]
XSLT vereist een denkwijze die lastig aan te wennen is voor mensen die alleen maar in imperatieve talen hebben leren programmeren.
Bedoel je hier "gewone" talen zoals Basic, C, C++, enz.?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
vandenfire: Bedoel je hier "gewone" talen zoals Basic, C, C++, enz.?
Ja inderdaad :) . In deze talen heb je leren programmeren door variabelen een waarde te geven en variabelen steeds een nieuwe waarde te geven. De assignment is hier dus een belangrijk werktuig. Er zijn echter ook heel veel talen die deze methode niet gebruiken. Ze worden dan ook wel eens declaratief genoemd, maar dat is nogal een slecht gedefinieerde notie.

Voorbeelden van zulke talen zijn de functionele talen (Haskell en Clean), transformatie talen als XSLT en Stratego, query talen als XPath, SQL en XQuery, logische talen zoals Prolog.

XSLT wordt door sommige onverlaten ook wel eens een functionele taal genoed, maar dat vind ik onjuist. XSLT is zo'n beetje de eerste declaratieve programmeertaal die een groter (en normaler) publiek weet te bereiken. Functioneel zijn wordt hier volgens mij verward met declarativiteit: niet elke declratieve taal is functioneel, niet elke taal zonder assignments is functioneel. Bovendien wordt er bij de term functionele taal vaak eigenlijk een hogere orde functionele taal bedoeld, wat de bewering dat XSLT functioneel is nog vreemder maakt.

Er zijn echter wel grote invloeden van functionele talen te vinden in XSLT. Niet voor niets is James Clark (de man achter XSLT) een fan van Haskell :) .

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


Verwijderd

Topicstarter
Ik gebruik een page break om elke klant op een eigen pagina te krijgen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:37
[nohtml]
Verwijderd schreef op 16 februari 2003 @ 18:01:

Heb je misschien een boeken tip mbt deze materie.
Ik kan je niet zeggen of het boek echt super is of niet (aangezien ik het zelf nog grotendeels moet lezen), maar ik heb volgend boek over XSL:

Just XSL
van John Simpson
ISBN : 0130603112

Zoals mbravenboer al zegt, jouw xsl is een stylesheet die gaat beschrijven hoe het resultaat van de transformatie er moet uit zien. Je gaat er echter niet in gaan beschrijven hoe die transformatie moet gebeuren. Je zegt gewoon hoe het er gaat moeten uitzien.

[ Voor 27% gewijzigd door whoami op 18-02-2003 20:43 ]

https://fgheysels.github.io/

Pagina: 1