xml_parse_into_struct

(PHP 3 >= 3.0.8, PHP 4, PHP 5)

xml_parse_into_struct -- Analyse une structure XML

Description

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 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
"Tableau d'index \n";
print_r($index);
echo
"\nTableau de valeurs \n";
print_r($vals);
?>

L'exemple ci-dessus va afficher :

Tableau d'index 
Array
(
    [PARA] => Array
        (
            [0] => 0
            [1] => 2
        )

    [NOTE] => Array
        (
            [0] => 1
        )

)

Tableau de valeurs 
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>
Et maintenant, un code qui analyse le document, et génère les objets ad hoc :

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 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
            [code] => A
            [type] => hydrophobic
        )

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

)



Rechercher une fonction PHP

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Nuage de mots clés

5 mots clés dont 0 définis manuellement (plus d'information...).

Avertissement

Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Références

  1. Consulter le document html Langue du document: fr Manuel PHP : http://be2.php.net, xml_parse_into_struct

Ces références et liens indiquent des documents consultés lors de la rédaction de cette page, ou qui peuvent apporter un complément d'information, mais les auteurs de ces sources ne peuvent être tenus responsables du contenu de cette page.
L'auteur de ce site est seul responsable de la manière dont sont présentés ici les différents concepts, et des libertés qui sont prises avec les ouvrages de référence. N'oubliez pas que vous devez croiser les informations de sources multiples afin de diminuer les risques d'erreurs.

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-5260
Document créé le 30/10/06 03:55, dernière modification le Vendredi 17 Juin 2011, 12:12
Source du document imprimé : http://www.gaudry.be/php-rf-function.xml-parse-into-struct.html Document affiché 1 fois ce mois de Juin.
St.Gaudry©07.01.02
Outils (masquer)
||
Recherche (afficher)
Recherche :

Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
15832 documents
452 astuces.
549 niouzes.
3099 definitions.
447 membres.
8115 messages.

Document genere en :
0,27 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
FACILE : Se dit d'une femme qui a la moralité sexuelle d'un homme.

Pierre Desproges
 
l'infobrol
Nous sommes le Dimanche 03 Juin 2012, 06:12, toutes les heures sont au format GMT+1.00 Heure, heure d'été (+1)