Parser du XML et caractères spéciaux

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Parser du XML et caractères spéciaux

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

par Ploppe » 10 oct. 2010, 11:15

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

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

par stealth35 » 10 oct. 2010, 00:41

utilise DOMDocument :wink:

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

par @rthur » 10 oct. 2010, 00:40

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

Parser du XML et caractères spéciaux

par Ploppe » 09 oct. 2010, 22:32

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);