Toon posts:

[XML/XSL] waarden vergelijken probleem

Pagina: 1
Acties:
  • 102 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hallo,

Ik ben bezig met een xml opdrachtje icm. Xpath. De bedoeling is dat hij in een tabel netjes weergeeft welke dokter de desbetreffende patiënt heeft. Voor- en achternaam weergeven en daarnaast de dokternaam.
To zo ver ben ik gekomen met onderstaand XML document.

XML
XML:
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" encoding="UTF-8"?>
<patientenadministratie>
    <patient nummer="239">
        <naam>
            <voornaam>Mabel</voornaam>
            <achternaam>Wisse Smits</achternaam>
        </naam>
        <geboortedatum>1949-09-04</geboortedatum>
        <geslacht>v</geslacht>
        <huisartscode>003</huisartscode>
    </patient>
    <patient nummer="241">
        <naam>
            <voornaam>Ben</voornaam>
            <achternaam>Boomsma</achternaam>
        </naam>
        <geslacht>m</geslacht>
        <burgerlijkestaat>alleenstaand</burgerlijkestaat>
        <huisartscode>001</huisartscode>
    </patient>
<patient nummer="242">
        <naam>
            <voornaam>Joep</voornaam>
            <achternaam>Janssen</achternaam>
        </naam>
        <geboortedatum>1959-09-24</geboortedatum>
        <geslacht>m</geslacht>
        <huisartscode>003</huisartscode>
    </patient>
    <huisartsen>
        <huisarts>
            <code>001</code>
            <naam>Marja Mensink</naam>
            <code>002</code>
            <naam>Klaas Bruinsma</naam>
            <code>003</code>
            <naam>Sjoerd Hermans</naam>
        </huisarts>
    </huisartsen>
</patientenadministratie>


Mijn XSL
XML:
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
<?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:template match="/">
        <html>
            <body>
                <table>
                    <tr>
                        <td width="150">
                            <b>Voornaam</b>
                        </td>
                        <td width="150">
                            <b>Achternaam</b>
                        </td>
                        <td width="150">
                            <b>Dokter</b>
                        </td>
                    </tr>
                    <xsl:apply-templates select="patientenadministratie/patient/naam"/>
                </table>
            </body>
        </html>
    </xsl:template>
    <xsl:template match="naam">
        <tr>
            <td>
                <xsl:value-of select="voornaam"/>
            </td>
            <td>
                <xsl:value-of select="achternaam"/>
            </td>
            <td>
                <xsl:if test="../huisartscode = ../../huisartsen/huisarts/code">
                    <xsl:value-of select="following::huisartsen/huisarts/naam"/>
                </xsl:if>
            </td>
        </tr>
    </xsl:template>
</xsl:stylesheet>

De huisartscode moet dus gelijk zijn aan huisartsen/huisarts/code. Als dat zo is geeft hij die dokter weer. Dat heb ik helaas nog niet werkend gekregen.
Iemand een suggestie of oplossing? Volgens mij hoeft het niet eens zo moeilijk te zijn, maar ik heb de kennis er nog niet voor en na lange zoektocht nog niks kunnen vinden.
Alvast bedankt!

[ Voor 22% gewijzigd door Verwijderd op 30-05-2005 13:58 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Je beschrijft een lange zoektocht. Wat heb je al gezocht? Wat heb je al gevonden/geprobeerd? Lees ook P&W FAQ - De "quickstart" even na, en pas dan je topicstart een beetje aan. Je topic lijkt nu verdacht veel op een scriptrequest, en dat staan we hier niet toe. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Het is vrij gecompliceerd in jouw voorbeeld omdat
1) De huisartsen niet in een element huisarts apart zitten, maar lekker verzameld in een element huisarts :?
2) Je niet standaard voor elk element een template hebt, zodat je per element gaat bekijken wat je er mee doet. Dit maakt het niet echt gecompliceerd, maar meer vrij onoverzichtelijk.

Affijn, de kunst is dus om je XML te veranderen zodat je 3 ipv 1 huisarts elementen krijgt, of je kunt de volgende constructie gaan gebruiken:
XSLT:
1
2
3
    <xsl:template match="huisartscode">
        <xsl:value-of select="/patientenadministratie/huisartsen/huisarts/code[.=current()]/following-sibling::naam" />
    </xsl:template>

Je selecteert dus het code element welke een gelijke waarde heeft aan de gematchde huisartscode en dan pak je de volgende naam sibling. Een <xsl:if> gaat je hier in ieder geval niet helpen zover ik kan zien.

[ Voor 13% gewijzigd door Glimi op 30-05-2005 14:40 ]