7.109 Analyseur syntaxique XML
7 Index des fonctions
Manuel PHP
. Introduction . Pré-requis . Installation . Configuration à l'exécution . Types de ressources . Constantes prédefinies . gestionnaires d'évènements . Problèmes de casse . Codes d'erreurs . Codage des caractères . Exemples . utf8_decode . utf8_encode . xml_error_string . xml_get_current_byte_index . xml_get_current_column_number . xml_get_current_line_number . xml_get_error_code ->xml_parse_into_struct . xml_parse . xml_parser_create_ns . xml_parser_create . xml_parser_free . xml_parser_get_option . xml_parser_set_option . xml_set_character_data_handler . xml_set_default_handler . xml_set_element_handler . xml_set_end_namespace_decl_handler . xml_set_external_entity_ref_handler . xml_set_notation_decl_handler . xml_set_object . xml_set_processing_instruction_handler . xml_set_start_namespace_decl_handler . xml_set_unparsed_entity_decl_handler
|
7.109.19 xml_parse_into_struct()Analyse une structure XML[ Exemples avec xml_parse_into_struct ] PHP 3>= 3.0.8, PHP 4
int
xml_parse_into_struct (
resource
parser
,
string
data
,
array
&values
,
array
&index
)
xml_parse_into_struct
analyse le fichier
XML
data
, et le place dans deux tableaux :
le premier
index
contient des pointeurs
sur la position des valeurs correspondantes dans le tableau
values
array. Ces deux paramètres sont
passés par références.
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 xml_parse_into_struct |
<?php $simple = "<para><note>Simple Note</note></para>"; $p = xml_parser_create(); xml_parse_into_struct($p,$simple,$vals,$index); xml_parser_free($p); echo "Tableau d'index \n"; print_r($index); echo "\nTableau de valeurs \n"; print_r($vals); ?>
|
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éculaire |
<moldb>
<molecule> <name>Alanine</name> <symbol>ala</symbol> <code>A</code> <type>hydrophobic</type> </molecule>
<molecule> <name>Lysine</name> <symbol>lys</symbol> <code>K</code> <type>charged</type> </molecule>
</moldb>
|
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 |
<?php
class AminoAcid { var $name; // nom aa var $symbol; // symbole à trois lettres var $code; // code à une lettre var $type; // hydrophobique, chargé ou neutre function AminoAcid ($aa) { foreach ($aa as $k=>$v) $this->$k = $aa[$k]; } }
function readDatabase($filename) { // read the xml database of aminoacids $data = implode("",file($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);
// loop through the structures foreach ($tags as
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
|
|