xml_parse_into_struct Analyse une structure XML &reftitle.description; intxml_parse_into_struct XMLParserparser stringdata arrayvalues arrayindex&null; Cette fonction analyse la chaîne XML data et le place dans deux tableaux : le premier index contient des pointeurs sur la position des valeurs correspondantes dans le tableau values. Ces deux paramètres sont passés par références. &reftitle.parameters; parser Une référence à une analyseur XML. data Une &string; contenant les données XML. values Un tableau contenant les valeurs des données XML. index Un tableau contenant les pointeurs vers les valeurs appropriées dans le paramètre $values. &reftitle.returnvalues; xml_parse_into_struct retourne 0 si une erreur survient et 1 en cas de succès. Ce n'est pas la même chose que &false; et &true;, soyez prudent avec les opérateurs comme ===. &reftitle.changelog; &Version; &Description; &xml.changelog.parser-param; &reftitle.examples; Ci-dessous, vous trouverez un exemple qui illustre la structure des deux tableaux générés par la fonction. On utilise une balise simple note, placée dans une autre balise para. On analyse le tout, et on affiche la structure générée : Exemple avec <function>xml_parse_into_struct</function> simple note"; $p = xml_parser_create(); xml_parse_into_struct($p, $simple, $vals, $index); xml_parser_free($p); echo "Index array\n"; print_r($index); echo "\nVals array\n"; print_r($vals); ?> ]]> Affichera : Array ( [0] => 0 [1] => 2 ) [NOTE] => Array ( [0] => 1 ) ) Vals array Array ( [0] => Array ( [tag] => PARA [type] => open [level] => 1 ) [1] => Array ( [tag] => NOTE [type] => complete [level] => 2 [value] => simple note ) [2] => Array ( [tag] => PARA [type] => close [level] => 1 ) ) ]]> L'analyse événementielle (comme celle de expat), peut se révéler complexe lorsque le document XML est complexe. xml_parse_into_struct ne génère pas d'objet de type DOM, mais il génère plutôt des structures qui peuvent être parcourues à la façon d'un arbre. Considérons le fichier suivant, qui représente une petite base de données XML : moldb.xml - Petite base de données moléculaires Alanine ala A hydrophobic Lysine lys K charged ]]> Et maintenant, un code qui analyse le document, et génère les objets ad hoc : parsemoldb.php : Analyse moldb.xml et crée un tableau d'objets moléculaires $v) $this->$k = $aa[$k]; } } function readDatabase($filename) { // lit la base de données xml des acides aminés $data = file_get_contents($filename); $parser = xml_parser_create(); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); xml_parse_into_struct($parser,$data,$values,$tags); xml_parser_free($parser); // boucle à travers les structures foreach ($tags as $key=>$val) { if ($key == "molecule") { $molranges = $val; // each contiguous pair of array entries are the // lower and upper range for each molecule definition for ($i=0; $i < count($molranges); $i+=2) { $offset = $molranges[$i] + 1; $len = $molranges[$i + 1] - $offset; $tdb[] = parseMol(array_slice($values, $offset, $len)); } } else { continue; } } return $tdb; } function parseMol($mvalues) { for ($i=0; $i < count($mvalues); $i++) $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"]; return new AminoAcid($mol); } $db = readDatabase("moldb.xml"); echo "** Base d'objets AminoAcid :\n"; print_r($db); ?> ]]> Après exécution de parsemoldb.php, la variable $db contient un tableau d'objets AminoAcid, et l'affichage le confirme : aminoacid Object ( [name] => Alanine [symbol] => ala [code] => A [type] => hydrophobic ) [1] => aminoacid Object ( [name] => Lysine [symbol] => lys [code] => K [type] => charged ) ) ]]>