xml_get_error_code
<<<
xml_parse_into_struct xml_parse
>>>

6.40 Analyseur syntaxique XML
6 Référence des fonctions
 Manuel PHP

Introduction
Pré-requis
Installation
Configuration à l'exécution
Types de ressources
Constantes pré-définies
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

6.40.19 xml_parse_into_struct()Analyse une structure XML

[ Exemples avec xml_parse_into_struct ]   PHP 3 >= 3.0.8, PHP 4, PHP 5

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 . Ces deux paramètres sont passés par références.

Note

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 ===.

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éculaires

<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 $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);

?>

<< xml_parse_into_struct >>
xml_get_error_code Analyseur syntaxique XML xml_parse