[PHP/XSLT] Externe XML files transformeren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • :murb:
  • Registratie: Oktober 2001
  • Laatst online: 17-09 21:03

:murb:

@murb.nl

Topicstarter
Heeft iemand hier ervaring met het samenvoegen van 2 xml files waarvan er 1 extern is met behulp van de sablotron xslt-parser?

Wat ik heb is een XML/RDF-meta bestand (A) welke gaat over een XML bestand met content (B ), welke mogelijk extern kan zijn (niet op de zelfde server). Meta informatie uit het XML/RDF bestand (A) dient samengevoegd te worden met het XML bestand (B ) met als resultaat een presenteerbare webpagina (waar bijvoorbeeld meta info als auteur zichtbaar wordt gemaakt).

Op de php.net site is een voorbeeld (zie reactie van 'ohlesbeauxjours at yahoo dot fr') te vinden, welke ik iets heb aan gepast (de url in het xml bestand bevat een complete uri, inclusief http://) wat in principe de oplossing is voor mijn probleem. In de variabele $c krijg ik wel de betreffende pagina binnen, de titel echter wordt niet weergegeven, hetgeen wel het resultaat zou zijn van deze code.

de gebruikte php versie op de server is: 4.3.6

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
<?php 
// XML content :
$xml='<?xml version="1.0"?>
    <page url="http://www.w3.org/TR/REC-xml/">W3C Recommendation page</page>';

// XSL content :
$xsl='<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" indent="no" omit-xml-declaration="yes" standalone="yes" media-type="text/html"/>
<xsl:template match="/">
   The title is : <xsl:value-of select="document(page/@url)/html/head/title"/>
</xsl:template>
</xsl:stylesheet>';

// TRANSFORMATION :
function handGetAll($processor,$scheme,$rest) {
 $rest=substr($rest,2);
 switch($scheme) {
       case 'http':
           $file = fopen("http://".$rest,"r");
           while(!feof($file))
               $c .= fgets($file, 1024);
           fclose($file);
           return $c;
           break;
   }
}

$xh = xslt_create();
xslt_set_scheme_handlers($xh,array("get_all" => "handGetAll"));
echo xslt_process($xh,'arg:/_xml', 'arg:/_xsl',NULL,array("/_xml"=>$xml,"/_xsl"=>$xsl));
xslt_free($xh);

 ?>


Weet iemand wat ik verkeerd doe? Bij voorbaat dank.

[ Voor 39% gewijzigd door :murb: op 21-11-2004 14:59 ]


Acties:
  • 0 Henk 'm!

  • :murb:
  • Registratie: Oktober 2001
  • Laatst online: 17-09 21:03

:murb:

@murb.nl

Topicstarter
Hmm, ik heb de 'oplossing' zelf gevonden. Wanneer ik mijn eigen domein neerzet als page url dan doet ie 't wel. Mogelijk een beveiligings instelling van de server. Hoe dan ook, bovenstaande code kan werken om het mogelijk te maken ook niet relatieve urls te openen in met de xslt functie document() :)

- Voor de duidelijkheid reageerde ik even op mijzelf -