[PHP/XSLT] cannot open file, path wel goed?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

ik zit met het volgende probleem: ik heb een functie die xml data return in een php script (header('Content-type: text/xml')). Die functie gebruik ik als variabele voor een andere functie. De functie ziet er dan zo uit:

$kernel->modules['xslt_class']->xslt_generate($kernel->modules['xml_class']->write('settings'), 'settings.xslt');

waarbij write('settings') dus het eerste argument is.
De functie xslt_generate bestaat uit de volgende code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?

class xslt
{

  var $result;

  function xslt_generate($xml_data, $xslt_file)
  { 
    global $kernel;

    $xh = xslt_create();
    xslt_set_base($xh, 'file://' . $_SERVER['DOCUMENT_ROOT'] . '/rdev/admin/templates/'); 

    $return = xslt_process($xh, $xml_data, 'file://' . $_SERVER['DOCUMENT_ROOT'] . '/rdev/admin/templates/' . $xslt_file);

    echo $return;

    xslt_free($xh);
  }
}
?>


Ik krijg echter de volgende error:
<br />
<b>Warning</b>: Sablotron error on line 6: cannot open file '...cription
</blogdescription>
<languagetext>Language
</languagetext>
<commentsperpagetext>Comments on each page
</commentsperpagetext>
</texttodisplay></settings>' in <b>path\www\rdev\classes\xslt_class.php</b> on line <b>20</b><br />

Ik heb de manual al grondig doorlezen en ook opgemerkt dat ik onder windows file:// moet gebruiken. Wat gaat er hier dan fout?

Avast bedankt...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
-schop- niemand die mij kan helpen ?
Vraag maar wat je niet begrijpt dan kan ik het mss wat beter omschrijven ?

Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

$xh = xslt_create();
xslt_set_base($xh, 'file://' . $DOCUMENT_ROOT . '/examples/');
Note the trailing slash in the above line.
The following line would then work on Win2k:
$result = xslt_process($xh, 'example.xml', 'example.xsl');
Zo te zien hoef je maar 1 keer 'file://' te gebruiken; alleen in xslt_set_base dus.

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee dat is het ook niet, sterker nog als ik $xml_data door 'settings.xml' bijvoorbeeld verander dan gaat het wel!
De error vind ik raar, hij showt die op het einde van het script en dan sluit hij nog een aantal tags af die reeds al werden afgesloten!

Ik ben ten einde raad -zucht-

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Ik begrijp dat je gebruikt maakt van een document () aanroep in een xpath ofzo? Aangezien er melding gemaakt wordt van een ' Sablotron error on line 6: cannot open file '...cription'...

Kan je wat source laten zien?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb volgende functie die deel uitmaakt van een class xml:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
  function write($_parent)
  {
    header('Content-type: text/xml'); 
    $this->tag_result = '<?xml version="1.0" encoding="ISO-8859-1"?>' . $this->breakline();
    $this->tag_result .= '<' . trim(strtolower($_parent)) . '>' . $this->breakline();

    foreach($this->structures[$_parent] as $tag => $value)
    {
      $this->create_tag($tag, $value);
    }

    $this->tag_result .= '</' . trim(strtolower($_parent)) . '>';
    return $this->tag_result;

  }
?>


die $this->tag_result returnt dus alle xml code die nodig is om getransformeerd te worden door xslt, via settings.xslt

Dan heb ik volgende code in men test.php
PHP:
1
2
3
4
<?
$kernel->modules['xslt_class']->xslt_generate($kernel->modules['xml_class']->write('settings'), 'settings.xslt');
// write('settings') is hier die functie die ik hierboven reedsvermelde.
?>

De output van die $this->tag_result is het volgende:

<settings>
<blogadminemail>dfsd</blogadminemail>
<blogdescription>Just another demo.</blogdescription>
<blogname>ReactBlog Demo</blogname>
<displayposts>5</displayposts>
<allownonmemberreact>true</allownonmemberreact>
<commentsperpage>10</commentsperpage>
-
<texttodisplay>
<settingstext>Settings
</settingstext>
<adminemailtext>Admin E-mail
</adminemailtext>
<displaypoststext>Number of posts shown on the frontpage
</displaypoststext>
<blogname>Number of posts shown on the frontpage
</blogname>
<blogdescription>Blog Description
</blogdescription>
<languagetext>Language
</languagetext>
<commentsperpagetext>Comments on each page
</commentsperpagetext>
</texttodisplay>
</settings>

Die output is dus het eerste argument van de xslt_generate functie.
Zoals ik al zei krijg ik dan deze error:

XML Parsing Error: junk after document element
Location: http://localhost/rdev/test.php
Line Number 2, Column 1:<b>Warning</b>: Sablotron error on line 9: cannot open file '...cription
^

Nu is het hopelijk wat duidelijker voor jullie, ik zit dus met die junk after document element ;(

[ Voor 15% gewijzigd door Verwijderd op 23-02-2004 13:25 ]


Acties:
  • 0 Henk 'm!

  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

Je geeft nu als 2e argument een string met daarin XML mee, terwijl het volgens mij een locatie moet zijn.
The input containers default to a filename 'containing' the document to be processed.
Zo moet het werken, als ik de documentatie mag geloven.
PHP:
1
2
3
4
5
6
7
8
9
10
$arguments = array(
     '/_xml' => $xml,
     '/_xsl' => $xsl
);

// Allocate a new XSLT processor
$xh = xslt_create();

// Process the document
$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok dat werkt nu, maar ik krijg geen html output te zien, ik krijg alles in XML formaat :X

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
<?php

class xslt
{

  var $result;

  function xslt_generate($xml_data, $xslt_file)
  { 
    global $kernel;

    $arguments = array(
    '/_xml' => $xml_data
    );


    $xh = xslt_create();

    xslt_set_base($xh, 'file://' . $_SERVER['DOCUMENT_ROOT'] . '/rdev/admin/templates/'); 

    $result = xslt_process($xh, 'arg:/_xml', 'settings.xslt', NULL, $arguments);


    echo $result;

    xslt_free($xh);

  }
}

?>


Waaraan kan dat nu liggen? ik krijg dus zoiets:
<html>
<body>hoi</body>
</html>
dus highlighted in XML.

Acties:
  • 0 Henk 'm!

  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

* Rickets trekt zijn waarzeggersgewaad aan en kijk in zijn glazen bol

Heb je het outputtype wel op HTML gezet in je XSL-stylesheet?

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zelfs al doe ik dit:

<?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" />
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td>.</td>
<td>.</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

dan krijg ik nog een error en wel de volgende:

XML Parsing Error: junk after document element
Location: http://localhost/rdev/test.php
Line Number 2, Column 1:<b>Warning</b>: Sablotron error on line 21: XML parser error 7: mismatched tag in <b>\www\rdev\classes\xslt_class.php</b> on line <b>21</b><br />
^

pff :7

[ Voor 25% gewijzigd door Verwijderd op 24-02-2004 10:37 . Reden: 2x </xsl:template> ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Misschien omdat je 2x de xsl:template afsluit :? 8)7

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Je hebt twee sluittags voor je template staan.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm ok, maar dan krijg ik nog alles in xml formaat hoor, zelfs met die <xsl:output method="html" />

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Kan je niet even e.e.a online zetten zodat we eens wat beter kunnen bekijken wat er nou mis gaat, want dit is allemaal zo vaag als de neten.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Om alles wat concreter uit te leggen:

ik heb een mysql class, daar wordt data uitgehaald en door een volgende class in xml omgezet.
De xml class returnt dus xml data:

<?xml version="1.0" encoding="ISO-8859-1"?>
<settings>
<blogadminemail>dfsd</blogadminemail>
<blogdescription>Just another demo.</blogdescription>
<blogname>ReactBlog Demo</blogname>
<displayposts>5</displayposts>
<allownonmemberreact>true</allownonmemberreact>
<commentsperpage>10</commentsperpage>
<texttodisplay><title>Settings
</title>
<adminemailtext>Admin E-mail

</adminemailtext>
<displaypoststext>Number of posts shown on the frontpage
</displaypoststext>
<blogname>Number of posts shown on the frontpage
</blogname>
<blogdescription>Blog Description
</blogdescription>
<languagetext>Language
</languagetext>
<commentsperpagetext>Comments on each page
</commentsperpagetext>
</texttodisplay></settings>

Ik wil deze laten omzetten door xslt in html met de volgende class:

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
<?
class xslt
{

  var $result;

  function xslt_generate($xml_data, $xslt_file)
  { 
    global $kernel;

    $arguments = array(
    '/_xml' => $xml_data
    );


    $xh = xslt_create();

    xslt_set_base($xh, 'file://' . $_SERVER['DOCUMENT_ROOT'] . '/rdev/admin/templates/'); 

    $result = xslt_process($xh, 'arg:/_xml', 'settings.xslt', NULL, $arguments);


    echo $result;

    xslt_free($xh);

  }
}
?>


settings.xslt bevat momenteel volgende code:

<?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" />
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td>.</td>
<td>.</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Nog geen values dus van het xml document.
Ik krijg echter gewoon xml outgeput (dus eigenlijk highlighted html).

Hopelijk is het nu wat duidelijker uitgelegd...
Misschien ligt het aan de encoding die ik gebruik ?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Wat is de source van je output?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
drm schreef op 24 februari 2004 @ 10:59:
Wat is de source van je output?
gewoon dit:

<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>

<tr>
<td>.</td>
<td>.</td>
</tr>
</table>
</body>
</html>

Maar in Firefox staat er dit wel bij bovenaan:


This XML file does not appear to have any style information associated with it. The document tree is shown below.

geen style informatie blijbkaar...

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Dan moet je even een goede content-type meegeven.
PHP:
1
Header ( "Content-type: text/html" );


En zet in het xsl:output element even de juiste doctype-public en doctype-system attributen. Zie w3schools voor een voorbeeldje.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
drm schreef op 24 februari 2004 @ 11:22:
Dan moet je even een goede content-type meegeven.
PHP:
1
Header ( "Content-type: text/html" );


En zet in het xsl:output element even de juiste doctype-public en doctype-system attributen. Zie w3schools voor een voorbeeldje.
Hartelijk dank!
Dat was het dus, ik had in men xml class idd een header ('Content-type: text/xml'); staan. Dat was dus de fout!

Nogmaals bedankt.. _/-\o_
Pagina: 1