Page 1 sur 1

Parser du XML et caractères spéciaux

Posté : 09 oct. 2010, 22:32
par Ploppe
Salut à tous !

Je suis en train de faire une moulinette php qui mange une page wikipédia en entrée. Autrement dit, ça commence comme ça :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" dir="ltr"> 
<head> 
<title>Titre de l'article - Wikipédia</title>
Le problème, lorsque j'affiche les 'textNode', c'est qu'ils sont découpés à chaque caractères spéciaux. Le code php (en fin de post) me sort cette réponse :
HTML ( XMLNS=http://www.w3.org/1999/xhtml LANG=fr DIR=ltr )
HEAD ( )
TITLE ( )
Titre de l'article - Wikip
édia
D'où ma question : comment faire pour que le textNode ne soit pas scindé à chaque caractère un peu spécial ?
(Je précise que tout est proprement encodé en UTF-8, sur une machine Windows 7, avec Wamp 2.0 et PHP 5.3.0)

Merci de m'aider !

Mon code php, inspiré de php.net, est celui-ci :
$file = "article.htm"; // Sauvegardé en local le temps de faire les tests
$depth = 0;

function startElement($parser, $name, $attrs) 
{
    echo "$name (";
	foreach($attrs as $key => $val){
		echo " $key=$val";
	}
	echo " )\n";
}

function textElement($parser, $text) 
{
	$text = preg_replace("/^\s+/", "", $text);
	if($text)
		echo "$text\n";
}

function endElement($parser, $name) 
{
    global $depth;
    $depth--;
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_default_handler($xml_parser, "textElement");
if (!($fp = fopen($file, "r"))) {
    die("could not open XML input");
}

while ($data = fread($fp, 4096)) {
    if (!xml_parse($xml_parser, $data, feof($fp))) {
        die(sprintf("XML error: %s at line %d",
                    xml_error_string(xml_get_error_code($xml_parser)),
                    xml_get_current_line_number($xml_parser)));
    }
}
xml_parser_free($xml_parser);

Re: Parser du XML et caractères spéciaux

Posté : 10 oct. 2010, 00:40
par @rthur
Bonjour,

Je ne vais pas répondre à ta question mais ça te ferra peut être gagner du temps, la base de données de Wikipedia est librement téléchargeable pour pouvoir être réutilisée facilement sur ton site, faire un miroir ou autre.
ça sera probablement plus simple que d'essayer d'aspirer le contenu et lorsqu'il changeront le template de page ton aspirateur ne marchera plus.

+ d'infos ici : http://en.wikipedia.org/wiki/Wikipedia: ... e_download

Re: Parser du XML et caractères spéciaux

Posté : 10 oct. 2010, 00:41
par stealth35
utilise DOMDocument :wink:

Re: Parser du XML et caractères spéciaux

Posté : 10 oct. 2010, 11:15
par Ploppe
En fait, je veux juste faire un outil pour montrer l'avancement de la saisie des gares ferrovières dans OpenStreetMap.

Du coup, je veux comparer la liste Wikipedia [1] avec les gares saisies dans OSM (obtenues pour l'instant avec une requête hasardeuse). Donc au final, je mouline Wikipedia qu'une seule page, et encore, que de temps en temps.

Enfin, merci pour les solutions, je vais regarder du côté du DOM, ou tester si ma précédente entrée est un textNode, auquel cas je concatène...

Bye

[1] http://fr.wikipedia.org/wiki/Liste_de_gares_de_France