(PHP 4, PHP 5, PHP 7, PHP 8)
xml_parse_into_struct — Analyse une structure XML
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.
parser
Une référence à une analyseur XML.
data
Une chaîne de caractères 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.
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 ===.
Version | Description |
---|---|
8.0.0 | parser attend une instance de XMLParser désormais; auparavent, une resourcexml était attendue. |
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 #1 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 "Index array\n";
print_r($index);
echo "\nVals array\n";
print_r($vals);
?>
Affichera :
Index array Array ( [PARA] => 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 :
Exemple #2 moldb.xml - Petite base de données moléculaires
<?xml version="1.0"?> <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>
Exemple #3 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 __construct ($aa) {
foreach ($aa as $k=>$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
** Base d'objets AminoAcid : Array ( [0] => aminoacid Object ( [name] => Alanine [symbol] => ala [code] => A [type] => hydrophobic ) [1] => aminoacid Object ( [name] => Lysine [symbol] => lys [code] => K [type] => charged ) )