Ben j'ai fait un fichier XML très simple pour tester puis un script PHP très simple lui aussi, que voici :
CODE |
<?php $file = "articletest.xml"; $pageContent = ""; function startElement($parser, $name, $attrs){ global $pageContent; echo "<$name><br>"; if(sizeof($attrs) > 0){ $pageContent .= "Attributs: "; foreach($attrs as $key => $value) $pageContent .= "$key,$value "; } } function endElement($parser, $name){ global $pageContent; $pageContent .= "<br></$name><br>"; } function characterData($arser, $data){ global $pageContent; $pageContent .= $data . "<br>"; } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement","endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if(!($fp= fopen($file,"r"))){ die("Impossible d'ouvrir le fichier <i>$file</i>"); } while($data=fread($fp,4096)){ if(!xml_parse($xml_parser, $data, feof($fp))){ die(sprintf("Erreur XML: %s à la ligne %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); echo $pageContent; ?> |
première erreur de saisie :
QUOTE |
(...) function characterData($parser, (...) |
CODE |
<?xml version='1.0'?> <!DOCTYPE chapter SYSTEM "/just/a/test.dtd" [ <!ENTITY plainEntity "FOO entity"> <!ENTITY systemEntity SYSTEM "xmltest2.xml"> ]> <chapter> <TITLE>Title &plainEntity;</TITLE> <para> <informaltable> <tgroup cols="3"> <tbody> <row><entry>a1</entry><entry morerows="1">b1</entry><entry>c1</entry></row> <row><entry>a2</entry><entry>c2</entry></row> <row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row> </tbody> </tgroup> </informaltable> </para> &systemEntity; <sect1 id="about"> <title>About this Document</title> <para> <!-- this is a comment --> <?php print 'Hi! This is PHP version '.phpversion(); ?> </para> </sect1> </chapter> |
C'est bizzare parce que le character data foncrtionnait correctement...
Le problème venait du end element !
bon je teste ça ce soir chez moi (au boulot je peux pas, ASP inside)
Merci Guepi.
EasyPHP inside
Explique moi le problème avec EndElement() ...
Maintenant le comportement est un peu plus étrange lol
voilà ce qu'il me sort avec ton fichier
QUOTE |
<CHAPTER><TITLE><PARA><INFORMALTABLE><TGROUP><TBODY><ROW><ENTRY><ENTRY><ENTRY><ROW><ENTRY><ENTRY><ROW><ENTRY><ENTRY><ENTRY><SECT1><TITLE><PARA> Title FOO entity </TITLE> Attributs: COLS,3 a1 </ENTRY> Attributs: MOREROWS,1 b1 </ENTRY> c1 </ENTRY> </ROW> a2 </ENTRY> c2 </ENTRY> </ROW> a3 </ENTRY> b3 </ENTRY> c3 </ENTRY> </ROW> </TBODY> </TGROUP> </INFORMALTABLE> </PARA> Attributs: ID,about About this Document </TITLE> </PARA> </SECT1> </CHAPTER> |
pkoi tu utilises pas le script de fr.php.net ???
CODE |
<?php $file = "data.xml"; $depth = array(); function startElement($parser, $name, $attrs) { global $depth; for ($i = 0; $i < $depth[$parser]; $i++) { print " "; } print "$name\n"; $depth[$parser]++; } function endElement($parser, $name) { global $depth; $depth[$parser]--; } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); 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); ?> |
En essayant ton code Hier soir je me suis apperçu qu'il faisait exactement la même chose que le mien hélas.
Moi j'aimerais qu'il soit capable de m'afficher <html><head></head><body><p>...</p><p>...</p></body></html>
et pas <html><head><body><p><p>.....
je l'ai ton truc ...
Dans startElement, tu fais un echo de tes balises <$name>, alors qu'il ne faudrait pas !
voilà mon code
CODE |
<?php $file = "articletest.xml"; $pageContent = ""; function startElement($parser, $name, $attrs){ global $pageContent; //echo "<$name><br>"; $pageContent .="<$name><br>"; if(sizeof($attrs) > 0){ $pageContent .= "Attributs: "; foreach($attrs as $key => $value) $pageContent .= "$key -> $value "; } } function endElement($parser, $name){ global $pageContent; $pageContent .= "</$name>"; } function characterData($parser, $data){ global $pageContent; $pageContent .= $data . "<br>"; } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement","endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if(!($fp= fopen($file,"r"))){ die("Impossible d'ouvrir le fichier <i>$file</i>"); } while($data=fread($fp,4096)){ if(!xml_parse($xml_parser, $data, feof($fp))){ die(sprintf("Erreur XML: %s à la ligne %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>xml.php</title> </head> <body> <? echo $pageContent; ?> </body> </html> |
Alors BgW, ça donne quoi chez toi ?
ça marche merci
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)