Bonjour,
J'ai fais un script pour parser un document xml en php avec la fonction simplexml_load_file...
Le script marche très bien, sauf que je dois parser de très gros fichiers de données, et là vu que simplexml_load_file charge tous le fichier en mémoire, ca fais boom !
Du coup on m'a conseillé d'utiliser xml_parser...
J'ai trouvé un exemple de code :
Mais je ne vois pas comment acceder aux noeuds xml de mon fichier...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 <?php $file = "data.xml"; $depth = array(); function startElement($parser, $name, $attrs) { global $depth; for ($i = 0; $i < $depth[$parser]; $i++) { echo " "; } echo "$name\n"; $depth[$parser]++; } function endElement($parser, $name) { global $depth; $depth[$parser]--; } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); if (!($fp = fopen($file, "r"))) { die("could not open XML input"); } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); ?>
Voici une partie de mon script d'origine :
Comment faire pour adapter mon script avec xml_parser ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 $xml = simplexml_load_file($source); foreach($xml->record as $doc) { $cle = $doc->controlfield; if($cle['tag']=="001") { .... } foreach($doc->datafield as $field) { $repEtiq[$x]=$field['tag']; foreach($field->subfield as $subfield) { $zone.=$subfield['code']; .... } } ...... }
Partager