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:
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; }
 
 
?>
la question de mon prof est:
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