xml_parse_into_struct

(PHP 4, PHP 5)

xml_parse_into_structAnalyse une structure XML

Description

int xml_parse_into_struct ( resource $parser , string $data , array &$values [, array &$index ] )

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.

Liste de paramètres

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.

Valeurs de retour

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

Exemples

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);
?>
<?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) {
	// lit la base de données xml des acides aminés 
	$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);

	// 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 :
** Base d'objets AminoAcid :
Array
(
    [0] => aminoacid Object
        (
            [name] => Alanine
            [symbol] => ala
            
=&gt; A
            [type] =&gt; hydrophobic
        )

    [1] =&gt; aminoacid Object
        (
            [name] =&gt; Lysine
            [symbol] =&gt; lys
            [code] =&gt; K
            [type] =&gt; charged
        )

)
</pre></div>
    </div>
   </div>
  </p>
 </div>


</div>
LoadingChargement en cours