[XSLT\PHP4] Probleem met xsl:import *

Pagina: 1
Acties:

  • Martijn80
  • Registratie: Januari 2007
  • Laatst online: 29-11 22:38
Hoi, voor een eindopdracht van mijn studie moet ik xml genereren met php. Ik stuit alleen op een probleem met de xslt:import. Als ik mijn xml-bestand en twee xsl-stylesheets parse met
php dan krijg ik de volgende error:

Warning: Sablotron error on line 15: XML parser error 7: mismatched tag in D:\Server\xampp\htdocs\xml\inloggen.php on line 25
XSLT processing error: XML parser error 7: mismatched tag

Mijn code ziet er als volgt uit:


XML: inloggen.xsl
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
 for (i = 0; i < 4; i++) {
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:import href="header.xsl"/>

<xsl:param name="loginID"/>
<xsl:param name="password"/>

<xsl:template match="STAFF">
  <xsl:call-template name="header"/>
    <xsl:choose>
      <xsl:when test="EMPLOYEE[@loginID=$loginID]">
        <xsl:apply-templates select="EMPLOYEE"/>
      </xsl:when>
      <xsl:otherwise>
        <h1>Welkom bij het vakantie planningssysteem</h1>
        <font color="#FF0000">LoginID of wachtwoord onjuist</font>
........
      </xsl:otherwise>
    </xsl:choose> 
  </body>
    </html>
</xsl:template>

<xsl:template match="EMPLOYEE">
  <xsl:if test="@loginID=$loginID">
      <xsl:if test="@passw=$password">
      <xsl:apply-templates select="NAME"/>
    </xsl:if>
.....
</xsl:template>

<xsl:template match="NAME">
  <P>Welkom: <xsl:value-of select="."/></P>
</xsl:template>

</xsl:stylesheet>
} 


XML: header.xsl
1
2
3
4
5
6
7
8
9
10
11
12
13
 for (i = 0; i < 4; i++) { 
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

<xsl:template name="header">
   <html>
   <head>
   <meta http-equiv="Content-Type" value="text/html; charset=utf-8"/>
   <title>Vakantie Planning Martijn's F1 merchandise</title>
   </head>
   <body BGCOLOR="#FFFFCC">
</xsl:template>
} 


PHP: inloggen.php
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
 for (i = 0; i < 4; i++) { 
<?php

$sXML = 'personal.xml';
$sXSL = 'inloggen.xsl';
$loginID = $_POST['loginID'];
$password = $_POST['passw'];

$xslt_params['loginID'] = $loginID;
$xslt_params['password'] = $password; 

$sXHTML = xml2html($sXML, $sXSL, $xslt_params);
echo $sXHTML;

function xml2html($xmldata, $xsl, $aParameters) 
{
   /* $xmldata -> your XML */
   /* $xsl -> XSLT file */   

   $xsltproc = xslt_create();
   
   $filebase = 'file://' . getcwd () . '/';
   xslt_set_base($xsltproc, $filebase);
   xslt_set_encoding($xsltproc, 'ISO-8859-1');
   
   $html = xslt_process($xsltproc, $xmldata, $xsl, NULL, Null, $aParameters);

   if (empty($html)) {
       die('XSLT processing error: '. xslt_error($xsltproc));
   }
   xslt_free($xsltproc);
   return $html;
}    

?> 
} 


Het probleem doet zich voor sinds ik de xsl:import gebruik. Dus op een of andere manier gaat het importeren van de header.xsl niet goed. Als ik de xml en xsl bestanden controleer met xsltproc dan gaat alles goed en komt er geen foutmelding.

Weet iemand hoe ik dit op kan lossen, want ik kom er niet meer uit.
Verder maak ik gebruik van PHP versie 4.4.4

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Ja, grapjas, header.xsl is namelijk geen valide XML.

Denk daar maar eens over na!

(Toegegeven, de foutmelding is wel wat obscuur.)

[ Voor 23% gewijzigd door djc op 19-01-2007 11:01 ]

Rustacean


  • Martijn80
  • Registratie: Januari 2007
  • Laatst online: 29-11 22:38
De header.xsl is niet goed afgesloten bedoel je?

Ook als de header.xsl afsluit met </xsl:stylesheet> blijft de foutmelding komen.

staff.xml ziet er overigens zo uit:

PHP: filename
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<?xml version="1.0" encoding="ISO-8859-1"?>
<STAFF>
    <EMPLOYEE empID="1" rights="1" loginID="Anco" passw="1234">
        <NAME>Anco Westra</NAME>
        <HOLIDAY days="5" bonus="0" maxDays="10"/>
    </EMPLOYEE>
    <EMPLOYEE empID="2" rights="1" loginID="Frances" passw="2345">
        <NAME>Frances Eikenhorst</NAME>
        <HOLIDAY days="0" bonus="0" maxDays="10"/>
    </EMPLOYEE>
</STAFF>
 

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Martijn80 schreef op vrijdag 19 januari 2007 @ 16:55:
Ook als de header.xsl afsluit met </xsl:stylesheet> blijft de foutmelding komen.
Is je header.xsl daarna well-formed XML?

Rustacean


  • Martijn80
  • Registratie: Januari 2007
  • Laatst online: 29-11 22:38
Manuzhai schreef op zaterdag 20 januari 2007 @ 11:37:
[...]
Is je header.xsl daarna well-formed XML?
Ik zie het probleem al de <html> en <body> tags worden niet afgesloten.

In iedergeval bedankt voor je hulp.