-
Notifications
You must be signed in to change notification settings - Fork 0
/
Sax.php
203 lines (179 loc) · 5.44 KB
/
Sax.php
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
<?php header('Content-type:text/html; Encoding:utf-8');
include('./Sax4PHP/Sax4PHP.php');
class SaxCross extends DefaultHandler
{
public $vent; //bool
public $boolbh; //bool
public $nb_victimes; //int
public $countC; //int
public $cross; //Liste des cross String
public $bh; //Bilan humain des opération par cross et par jour. INT
public $pointeurC, $pointeurJ; //Pointeur de cross et pointeur de jour. INT
function __construct()
{
parent::__construct();
}
function startDocument()
{
//Un problème surviens lors de l'exécution. Aucun passage par la fonction startDocument n'est effectué
$this->countC = 0;
$xml = "<?xml version='1.0' encoding='UTF-8' ?>\n"; //<?php
$xml .= "<!DOCTYPE liste-cross SYSTEM 'operations.dtd'>\n";
$xml .= "<liste-cross>\n";
}
function endDocument()
{
//Valeur par défaut en cas d'absence de données
for ($i = 0; $i < $this->countC; $i++) {
if (!isset($this->bh[$i][0])) {
$this->bh[$i][0] = 0;
}
if (!isset($this->bh[$i][1])) {
$this->bh[$i][1] = 0;
}
if (!isset($this->bh[$i][2])) {
$this->bh[$i][2] = 0;
}
if (!isset($this->bh[$i][3])) {
$this->bh[$i][3] = 0;
}
if (!isset($this->bh[$i][4])) {
$this->bh[$i][4] = 0;
}
if (!isset($this->bh[$i][5])) {
$this->bh[$i][5] = 0;
}
if (!isset($this->bh[$i][6])) {
$this->bh[$i][6] = 0;
}
if (!isset($this->bh[$i][7])) {
$this->bh[$i][7] = 0;
}
//Affichage du contenu des balises <liste-cross> ... </liste-cross>
$xml .= "\t<cross nom=" . $this->cross[$i][0] . " nb=" . $this->bh[$i][0] . ">\n" .
"\t\t<lundi victimes=" . $this->bh[$i][1] . "/>\n" .
"\t\t<mardi victimes=" . $this->bh[$i][2] . "/>\n" .
"\t\t<mercredi victimes=" . $this->bh[$i][3] . "/>\n" .
"\t\t<jeudi victimes=" . $this->bh[$i][4] . "/>\n" .
"\t\t<vendredi victimes=" . $this->bh[$i][5] . "/>\n" .
"\t\t<samedi victimes=" . $this->bh[$i][6] . "/>\n" .
"\t\t<dimanche victimes=" . $this->bh[$i][7] . "/>\n" .
"\t</cross>\n";
}
$xml .= "</liste-cross>";//Fin liste-cross
//Suite au non passage par la fonction startDocument() lors de l'execution report de l'entête du document
$xml_start = "<?xml version='1.0' encoding='UTF-8' ?>\n"; //<?php
$xml_start .= "<!DOCTYPE liste-cross SYSTEM 'operations.dtd'>\n";
$xml_start .= "<liste-cross>\n";
$xml = $xml_start.$xml;
echo $xml;//Print du résultat dans le terminal
//Ecriture du résultat dans le fichier liste-cross.xml
$file = fopen("liste-cross.xml", "w");
fwrite($file,$xml);
fclose($file);
}
function startElement($nom, $att)
{
switch ($nom) {
case "cross":
$this->cross[$this->countC][0] = $att["nom"];
$this->cross[$this->countC][1] = $att["xml:id"];
$this->countC++;
break;
case "jour":
//En fonction du jour de l'opération incrémentation
if (isset($att["vacances_scolaires"]) && $att["vacances_scolaires"] == "True") //Opération effectué en période de vacance
{
switch ($att["jour"]) {
case "Lundi": //l'operation se déroule un lundi
$this->pointeurJ = 1;
break;
case "Mardi": //l'operation se déroule un mardi
$this->pointeurJ = 2;
break;
case "Mercredi": //l'operation se déroule un mercredi
$this->pointeurJ = 3;
break;
case "Jeudi": //l'operation se déroule un jeudi
$this->pointeurJ = 4;
break;
case "Vendredi": //l'operation se déroule un vendredi
$this->pointeurJ = 5;
break;
case "Samedi": //l'operation se déroule un samedi
$this->pointeurJ = 6;
break;
case "Dimanche": //l'operation se déroule un dimanche
$this->pointeurJ = 7;
break;
}
}
break;
case "coordination":
if ($this->vent && (isset($this->pointeurJ) && $this->pointeurJ != 0)) {
//Total de cross
for ($i = 0; $i < $this->countC; $i++) {
if ($att["cross"] == $this->cross[$i][1]) {
$this->pointeurC = $i;
}
}
if (!isset($this->bh[$this->pointeurC][0])) {
//Valeur par défaut d'opération qui concerne le cross du pointeurC
$this->bh[$this->pointeurC][0] = 0;
}
//Nombre total d'opération qui concerne le cross du pointeurC.
$this->bh[$this->pointeurC][0] = $this->bh[$this->pointeurC][0] + 1;
//Si il y a un bilan humain incrément de ce dernier au jour concerné dans la cross concerné.
if ($this->boolbh) {
if (!isset($this->bh[$this->pointeurC][$this->pointeurJ])) {
$this->bh[$this->pointeurC][$this->pointeurJ] = 0;
}
$this->bh[$this->pointeurC][$this->pointeurJ] = $this->bh[$this->pointeurC][$this->pointeurJ] + $this->nb_victimes; // enregistrement du bilan humain de l'opération
}
}
break;
case "vent":
if (isset($att["force"]) && $att["force"] > 3)
{
$this->vent = true;
}
break;
case "bilan-humain":
$this->boolbh = true;
if(isset($att["nombre"]))
{
$this->nb_victimes = $att["nombre"];
}
else
{
$this->nb_victimes = 0;
}
break;
}
}
function endElement($nom)
{
switch ($nom) {
case "opération":
//Reset des var pour la prochaine opération
$this->pointeurJ = 0;
$this->pointeurC = 0;
$this->vent = false;
$this->boolbh = false;
break;
}
}
}
try
{
$sax = new SaxParser(new SaxCross());
$sax->parse('cross.xml');
}
catch (SAXException $e)
{
echo "\n", $e;
}
catch (Exception $e)
{
echo "Capture de l'exception par défaut\n", $e;
}