[PHP] [Tidy] [XML] validatieproblemen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • McRubz
  • Registratie: Januari 2004
  • Niet online
Om maar meteen met de deur in huis te vallen:
Ik probeer met behulp van PHP-tidy van een html-file een valid xhtml-fle te maken om deze later met behulp van xslt om te zetten in een grote xml-file.

Dat doe ik op deze manier:

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
<?php
//pagina ophalen
$doc = @DOMDocument::loadHTMLFile("http://www.tweakers.net");  // tweakers.net als voorbeeld

$html = $doc->saveHTML(); // DOM naar string

// Specify configuration
$config = array(
'indent-attributes' => true,
'alt-text' => "",
'drop-font-tags' => true,
'output-xhtml'   => true);

// Tidy
$tidy = new tidy;
$tidy->parseString($html, $config, 'utf8');
$tidy->cleanRepair();
$tidy = trim($tidy);
// Output
//echo $tidy;

$newdoc = DOMDocument::loadHTML($tidy);

echo $newdoc->saveXML();

//pagina opslaan als test.html
$newdoc->save("test.html");
?>


wat is nu het probleem?
1.
code:
1
<html xmlns="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml">

dus tweemaal een xmlns-declaratie. Waar komt die vandaan? In het brondocument dat ik gebruik staat alleen <html>, dus tidy verzint het er twee keer bij?

2. &#xD; achter elke regel. Hoe kom ik daar vanaf?

3. test.html bevat ook de code: <?xml version="1.0" standalone="yes"?>
prima, maar volgens mijn xml-editor (<oXygen/>) hoort een standalone document bijvoorbeeld bij elke <td> een colspan en een rowspan mee te geven. Dit is in een aantal gevallen wel het geval, omdat daar de colspan meer dan de standaard 1 is, maar ik hoef toch niet in alle gevallen een colspan op te geven?

Ik heb al gezocht op de websites/documentatie van php alsmede die van tidy (http://tidy.sourceforge.net/docs/quickref.html) maar ik kan niet tot een oplossing komen. Wie wel?

Alvast bedankt

Acties:
  • 0 Henk 'm!

  • McRubz
  • Registratie: Januari 2004
  • Niet online
Ik heb het al opgelost!

Alle problemen werden veroorzaakt door dit stukje code:
PHP:
1
2
3
4
5
6
$newdoc = DOMDocument::loadHTML($tidy); 

echo $newdoc->saveXML(); 

//pagina opslaan als test.html 
$newdoc->save("test.html");

Dat heb ik vervangen door dit:
code:
1
2
3
4
5
6
7
// Output
echo $tidy;

$file = "test.html";
$fh = fopen($file, 'w') or die("Can't open file"); 
fwrite($fh, "$tidy"); 
fclose($fh);

Het probleem was dat de loadHTML() en saveHTML/XML() functie de code ook nog eens veranderde. Door de output uit $tidy meteen weg te schrijven is het probleem opgelost :)