[PHP + XML] XLM file parsen? of weergeven in HTML?

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

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heren tweakerts,

Ik kom er niet helemaal meer uit. Ik bezig met het maken (genereren) van een sitemap in het XLM formaat, zodat de structuur van de site duidelijker is voor de googlebots (en andere zoekmachines). Dit is mijn eerste ervaring met XLM en het lijkt in eerste instantie vrij simpel. Ik heb een tutorial op W3 Scools doorgenomen en ik begrijp wat de intentie van XLM is (data beschrijven, niet weergeven). Toch gaat het fout.

Ik heb aan de ene kant een XLM file waarin alle links op mijn site staan met wat extra info, dit bestand ziet er (in ingekorte vorm) als volgt uit:
code:
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="ISO-8859-1"?>
<urlset>
  <url>
    <loc>http://80.60.182.91/termaten.nl-nieuw/index.php?page=nl/home_home.php</loc>
    <lastmod>2005-08-09</lastmod>
    <changefreq>weekly</changefreq>
    <priority>0.5</priority>
  </url>
</urlset>

Dit bestand wil ik op 2 manieren aanbieden, direct aan de bot door het in de root van de websitedir te zetten en aan de bezoeker d.m.v van een tekstuele/visuele sitemap. Dit laatste vormt een probleem, omdat wanneer ik het bestand included in mijn index.php ik een foutmelding krijg, nl:

Parse error: syntax error, unexpected T_STRING in sitemap.xml on line 1

Hij valt dus over deze regel: <?xml version="1.0" encoding="ISO-8859-1"?> maar die is nodig voor het xml bestand?

Hoe kan ik het wel voor elkaar krijgen? Ik las over allemaal omslachtige methodes via javascript enz. maar ik hoop dat dat toch niet de bedoeling is.

Alvast bedankt, belgie

[ Voor 7% gewijzigd door Verwijderd op 10-08-2005 00:54 ]


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Als je doel is om je sitestructuur duidelijk te maken voor search-robots dan zou ik zeker geen XML gebruiken. XML kent immers geen enkele semantiek. Hoe moet een robot weten dat <loc> een URL beschrijft, en dat <lastmod> een datum bevat, en waar zou die datum op moeten slaan?

Verder: hoe wil je dit gaan visualiseren aan de gebruiker zonder transformatie naar (X)HTML?

Je include-probleem ligt overigens puur in het feit dat je short_open_tag directive op ON staat waardoor alles wat begint met <? als PHP wordt geinterpreteerd, maar zelfs al zet je die op OFF of include je de content van dat bestand op een andere manier, dan kan de browser er nog niet veel mee...

[ Voor 12% gewijzigd door crisp op 10-08-2005 01:04 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wilde XML gebruiken, omdat Google dat format aanraadt. Zie http://www.google.com/web...aps/docs/en/overview.html en de pagina waarop wat meer uitleg staat: http://www.google.com/webmasters/sitemaps/docs/en/about.html

Hierop staat ook duidelijk dat sitemap op deze manier ervoor zou kunnen zorgen dat je site beter geindexeerd wordt, dus dat wil dan ook wel proberen.

Het probleem is dat als ik dan toch een XML file moet gebruiken dan wil ik die meteen gebruiken om de sitemap op de site zelf weer te geven. Ik begrijp dus dat er hoe dan een transformatie naar XHTML moet plaatsvinden. Hoe zou ik dat dan het beste kunnen doen?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

XSLT (liefst serverside).

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Thanx, ik die tutorial doorwerken maar hier kan ik wat mee. Mocht ik er niet uitkomen dan horen jullie dat uiteraard. Bedankt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ben ik weer. Ik heb het voor elkaar dat ik door middel van een XSL opmaakfile de XML omgezet naar XHTML en weergeef op een site. Als ik mijn sitemap.xml losstaand open gaat het goed, hij pakt de juiste opmaak enz.

Het gaat echter fout wanneer ik het bestand included in mijn index.php. Het lijkt wel alsof hij dan de xls file niet aanroept/ziet?

Sitemap.xml los http://80.60.182.91/test/sitemap.xml
XSL file http://80.60.182.91/test/transform.xsl
included (gaat fout) http://80.60.182.91/test/index.php?page=sitemap.xml

Waarom gaat dit fout?

Acties:
  • 0 Henk 'm!

  • Vesta
  • Registratie: November 2004
  • Niet online
Dat komt omdat de xml ongeparst in de html wordt geplaatst, het wordt dus gewoon gezien als html. Daarom moet je de xml niet direct includen, maar deze eerst mbv xslt transformeren naar (x)html zoals crisp al aangaf.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
En hoe zorg ik er dan voor dat de XML eerst geparsed wordt, voordat hij geincluded wordt? De XHTML moet namelijk wel geincluded worden..

Acties:
  • 0 Henk 'm!

  • aex351
  • Registratie: Juni 2005
  • Laatst online: 02:04

aex351

I am the one

simplexml functie in php5 is een optie. en anders moet je zelf een parser schrijven.

< dit stukje webruimte is te huur >


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het wordt wel vrij ingewikkeld zo onderhand. Moet ik die functie dan voor de included aanroepen? Hoe komt dit er in de praktijk uit te zien: functie voor de included parsed, XML d.m.v van de XSL file en de XHTML wordt dan geincluded door PHP?

Acties:
  • 0 Henk 'm!

  • Vesta
  • Registratie: November 2004
  • Niet online
of http://nl2.php.net/xsl (dus zonder t aan het einde), bij transformToXML() staat een leuk voorbeeldje.

edit:
Je hebt nu ergens in je php pagina include("sitemap.xml") staan. Deze regel moet je vervangen door de "transformatie" code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php

// Load the XML source
$xml = new DOMDocument;
$xml->load('collection.xml');

$xsl = new DOMDocument;
$xsl->load('collection.xsl');

// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules

echo $proc->transformToXML($xml);

?>
Zo dus ongeveer...

[ Voor 81% gewijzigd door Vesta op 10-08-2005 13:02 ]


Acties:
  • 0 Henk 'm!

  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
aex351 schreef op woensdag 10 augustus 2005 @ 12:52:
simplexml functie in php5 is een optie. en anders moet je zelf een parser schrijven.
In PHP4.1 kan ook zoiets: Zie voorbeeld op php.net

Koop of verkoop je webshop: ecquisition.com


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De XSL(t) extensie staat nu bij mij aan. Het enige wat me niet echt duidelijk wordt is hoe ik door middel van die extensie de file moet parsen? Kan iemand een voorzetje van de te volgen methode geven?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik was met vorige reactie iets te snel. Het werkt nu! Heb mijn included functie omgebouwd zodat de xml parser er ook in zit, ziet er nu als volgt uit:

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
  if (isset($_GET['page'])) {           // variabele bestaat
   $page = $_GET['page'];               // laad variabele in uit URL
   if ($page == "sitemap.xml") {        //page = sitemap, start parsen via xsl
   // Load the XML source 
$xml = new DOMDocument; 
$xml->load('sitemap.xml'); 

$xsl = new DOMDocument; 
$xsl->load('transform.xsl'); 

// Configure the transformer 
$proc = new XSLTProcessor; 
$proc->importStyleSheet($xsl); // attach the xsl rules 

echo $proc->transformToXML($xml); 
}
  } else {
   $page = "";                          // geen variabele, leeg maken
  }

  if ($page) {                          // er is een variabele meegegeven in URL
   if (!file_exists($page)) {           // bestaat pagina
    $page = "nl/error.php";             // foutscherm 
    header ("Location: index.php?page=nl/error.php"); //renew de pagina
   }
  } else {                              // geen pagina meegegeven
   $page = "nl/home_home.php";          // standaardvulling
    header ("Location: index.php?page=nl/home_home.php"); //renew de pagina
  }
 if ($page != "sitemap.xml") {          // alleen als de pagina niet gelijk is sitemap file includen
 include($page);
 } 
?>


Thanks broeders, zonder jullie hulp was ik hier niet uitgekomen..
Pagina: 1