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 :
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);
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 :
[html]<!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>[/html]
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 :
[quote]HTML ( XMLNS=http://www.w3.org/1999/xhtml LANG=fr DIR=ltr )
HEAD ( )
TITLE ( )
Titre de l'article - Wikip
édia[/quote]
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 :
[php]$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);
[/php]