bonjour,
je galère sur un problème des balises auto-fermantes dans XML.
j'ai un fichier XML, et je l'annalyse avec PHP Sax.
les codes de PHP sont:
la question de mon prof est:
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
37 <?php function accessibiliser($file) { $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "ouvrante", "fermante"); xml_set_character_data_handler($xml_parser, "texte"); xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); if (!($f = fopen($file, "r"))) { die("Impossible d'ouvrir le fichier '$file'"); } while ($data = fread($f, 1024)) { if (!xml_parse($xml_parser, $data, feof($f))) { die(sprintf("erreur XML : %s ligne %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); } function ouvrante($parser, $name, $attrs) { echo "<$name"; foreach ($attrs as $k => $v) echo " $k='$v'"; echo ">"; } function fermante($parser, $name) { echo "</", $name, ">"; } function texte($parser, $data) { echo $data; } ?>
Afin de ne pas dégrader la présentation des balises link, meta, input, img etc, il faut commencer par modifier les preneurs élémentaires ci-dessus afin qu’ils produisent l’abréviation <balise /> et non <balise ></balise > comme actuellement . Pour cela, il ne faut pas appliquer echo sur > dans le preneur des ouvrantes, mais différer son envoi dans l’événement SAX suivant : si celui-ci appelle le preneur des fermantes, l’abréviation y sera possible, sinon il faut envoyer >. On utilisera un tableau global t et un compteur c pour mémoriser si > a été envoyé pour la balise ouvrante de profondeur c.
Alors je ne sais pas trop comment le faire
Partager