ste Posté 13 Juillet 2004 Partager Posté 13 Juillet 2004 Bonsoir, enfin, je viens de comprendre (et donc de me mettre) au fameux couple XML-PHP. J'ai donc créée (dans l'immédiat - histoire de m'y exercer) une class PHP pour parser du XML ! J'aurais 2 questions, svp : -1- dans ma fichier xml, j'ai comme attribut sur certaines balises 'xml:lang' pour la déclaration correspondante... Hors, quand je cherche à récupérer la valeur de mon tableau $attribs["XML:LANG"], j'ai une valeur vide retournée ! Alors qu'elle est affectée... dans mon fichier xml. Cette valeur ne peut-être lue parce qu'elle correspond à une déclaration xml native ? -2- dans mon fichier xml, j'ai un élément title dont le but (évident !) est de correspondre à l'élément title de la future page html !... Pour l'instant, le temps de mon test, histoire de vérifier que mon parser fonctionne, je le laisse tourner ainsi... mais mon désir est de pouvoir capturer cet élément pour le déclarer autrement, à part... pourriez-vous m'aiguiller et me donner une idée de comment le réaliser ? (certainement à retourner dans une function que je pourrais appeler aprés... !?) Le fichier xml : http://dev.stephane-huc.net/test/Ad-Myre_project.xml Quant à ma class PHP : <?phpclass parser_xml { var $abbr; var $parser; var $owner; var $file; var $link; var $elementStarter; var $elementEnder; function parser_xml($file) { $this->verif_file($file); $this->elementStarter = array ( "DOC" => "<div id=\"project\">", "NAME" => "<h2", "TITLE" => "<title>", "P" => "<p>", "BOLD" => "<strong>", "ABBR" => "<acronym", "CHAPTER" => "<h3>", "LIST" => "<ul>", "ITEM" => "<li>", "DEFINITION" => "<dl>", "DEFTITLE" => "<dt>", "DEFITEM"=> "<dd>", "IT" => "<em>", "LINK" => "<a", "BR" => "<br", ); $this->elementEnder = array ( "DOC" => "</div>", "NAME" => "</h2>", "TITLE" => "</title>", "P" => "</p>", "BOLD" => "</strong>", "ABBR" => "</acronym>", "CHAPTER" => "</h3>", "LIST" => "</ul>", "ITEM" => "</li>", "DEFINITION" => "</dl>", "DEFTITLE" => "</dt>", "DEFITEM"=> "</dd>", "IT" => "</em>", "LINK" => "</a>", "BR" => " />", ); } function verif_file($file) { $this->owner = fileOwner("index.php"); if(file_exists($file) && is_file($file) && is_readable($file) && (fileOwner($file) == $this->owner)) $this->file = $file; } function first_element($parser, $name, $attribs) { if($name == "NAME") { $this->name = $this->elementStarter[$name]; if(!empty($attribs["ID"])) { $this->name .= " id=\""; $this->name .= $attribs["ID"]; $this->name .= "\"><a name=\""; $this->name .= $attribs["ID"]; $this->name .= "\"></a"; } $this->name .= ">"; echo $this->name; } elseif($name == "LINK") { $this->link = $this->elementStarter[$name]; $this->link .= " hreflang=\""; $this->link .= $attribs["XML:LANG"]; $this->link .= "\" href=\""; $this->link .= $attribs["XLINK:HREF"]; $this->link .= "\" title=\""; $this->link .= $attribs["XLINK:TITLE"]; $this->link .= "\""; $this->link .= ">"; echo $this->link; } elseif( $name == "ABBR") { $this->abbr = $this->elementStarter[$name]; $this->abbr .= " lang=\""; $this->abbr .= $attribs["XML:LANG"]; $this->abbr .= "\" title=\""; $this->abbr .= $attribs["DEF"]; $this->abbr .= "\""; $this->abbr .= ">"; echo $this->abbr; } else echo $this->elementStarter[$name]; } function end_element($parser, $name) { echo $this->elementEnder[$name]; } function display_text($parser, $data) { echo $data; } function manager_smart($parser, $cible, $data) { switch (strtolower($cible)){ case "php": eval($data); break; } } function manager_ref_ext($parser, $openEntityNames, $base, $systemId, $publicId) { if (!empty($systemId)) { if (!$analyze = new parser_xml($systemId)) { printf("Could'nt to open the element %s not at %s\n", $openEntityNames, $systemId); return false; } $analyze->parser(); return true; } } function parser() { $this->parser = xml_parser_create_ns(); xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, true); xml_set_object($this->parser, &$this); xml_set_element_handler($this->parser, "first_element", "end_element"); xml_set_character_data_handler($this->parser, "display_text"); xml_set_processing_instruction_handler($this->parser, "manager_smart"); xml_set_external_entity_ref_handler($this->parser, "manager_ref_ext"); if (!($fp = _AT_fopen($this->file, "r"))) die("Could'nt to open this XML $file"); while ($data = fread($fp, 4096)) { if ( !xml_parse( $this->parser, $data, feof($fp) ) ) { die( sprintf( "Error XML %s at the line: %d\n\n", xml_error_string(xml_get_error_code( $this->parser ) ), xml_get_current_line_number( $this->parser) ) ); } } fclose($fp); xml_parser_free($this->parser); }}?> Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant