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
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
:
Lors de l'éxécution du code, l'affichage sera :
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
1
.
moldb.xml
-
Petite
base
de
données
moléculaire
|
Et maitenant, un code qui analyse le document, et génère les
objet ad hoc :
Exemple
2
.
parsemoldb.php
-
analyse
moldb.xml
et
crée
un
tableau
d
'
objet
moléculaires
?php
class
AminoAcid
{
var
$name
;
/
/
nom
de
l'amino
acide
var
$symbol
;
/
/
symbole
en
trois
lettres
var
$code
;
/
/
code
en
une
lettre
var
$type
;
/
/
hydrophobe
,
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)
;
/
/
parcourt
les
structures
foreach
($tags
as
$key
-
$val
)
{
if
($key
==
"molecule"
)
{
$molranges
=
$val
;
/
/
chaque
paire
contigue
sont
les
définitions
supérieures
/
/
et
inférieures
de
la
molécule
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
"**
Database
of
AminoAcid
objects:\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 :