Rapport parsing xml avec php
François Filliettaz
STAF_G 2000/2001


25 mars 2001

 

 

Pour cet exercice, j'ai adapté un test que j'ai écrit en javascript pour le Centre de psychologie humanitaire.

Brève description du test

Il existe différentes formes de stress post-traumatique. Ce test s'intéresse à toutes ces formes, mais surtout à une forme encore peu connue, la vicitmisation secondaire, dont souffrent tout particulièrement les humanitaires. En deux mots, il s'agit de la réaction du "sauveur" par rapport au sort de la "victime", qu'il y assiste directement ou par le biai d'un récit. Ce test est un élément d'une recherche universitaire, il est utilisé par les humanitaires intéressés (il y en a déjà beaucoup) qui y trouvent des réponses appropriées à leur état, et les réponses ainsi que la valeur des variables sont transmises par mail au psychologue, qui trouve là la matière de sa recherche.

L'interface est volontairement simple, sobre, faite d'espaces bleus et d'espaces blancs. Elle tient compte de l'état d'esprit des humanitaires qui, souffrant du PTSD, viennent chercher dans ce test le début d'un réconfort. L'importance va aux questions et aux réponses, non à la page, à l'objet informatique.

Le test est constitué d'une série de 120 questions et trois parcours: stress traumatique, stress et burn-out. Chaque parcours se réfère à des séries de questions qui vont varier au gré des réponses, le but étant bien évidemment d'obtenir les résultats les plus précis possible. Il ne s'agit pas ici de décrire la programmation javascript qui permet ces cheminements variables.

Un formulaire permet d'envoyer les réponses et les valeurs des variables à un programme écrit en php (feedbackxml.php) qui va analyser tout cela, retourner un "diagnostic" et envoyer le tout au psychologue. Exemple de mail au psychologue::

 

Subject: Résultats du test PTSD du CPH
To: francois.filliettaz@bluewin.ch

Questionnaire traité le 25 March 2001, à 6.57 pm
Parcours 1

REPONSES AUX QUESTIONS:
0 : ou vous avez déjà vécu une situation extrême qui a impliqué un proche, ami ou collègue, travaillant avec vous,.
1 : assisté à un spectacle de mort.
7 : Tout à fait.
8 : Oui.
9 : Oui.
10 : Oui.
11 : Plutôt oui.
12 : Plutôt oui.
13 : peur.
14 : Non.
15 : 2.
16 : Plutôt oui.
17 : Plutôt oui.
18 : Oui, souvent.
19 : Plutôt oui.
20 : Plutôt oui.
50 : Plutôt oui.
51 : Plutôt non.
52 : Oui, parfois.
53 : Rarement.
54 : Oui, souvent.
55 : Non.
57 : Oui.
58 : Oui, toujours.
59 : Oui, toujours.
60 : Souvent.
61 : il y a moins d\'un mois.
62 : Souvent.
63 : Oui, toujours.
64 : Parfois.
65 : Oui, toujours.
66 : Oui, toujours.
67 : Plutôt non.
68 : Non, rarement.
69 : Oui, parfois.
82 : Rarement.
83 : Oui, parfois.
84 : Rarement.

REPONSES AUX QUESTIONS COMPLEMENTAIRES ID1:
85 : Tout à fait.
86 : pas à la hauteur.
87 : Toujours.
88 : Oui.
89 : Non.
90 : Oui.

REPONSES AUX QUESTIONS COMPLEMENTAIRES ID2:
91 : Non, rien n\'a changé.
92 : Oui.
93 : Plutôt oui.
94 : Souvent.
95 : Non.
96 : Parfois.
97 : Non.
98 : Parfois.
99 : - la vie est pâle et opaque, sans goût.

REPONSES AUX QUESTIONS COMPLEMENTAIRES CT1:
100 : Oui.
101 : Non.
102 : Parfois.
103 : Oui.
104 : Non.
105 : Oui.
106 : Oui.

REPONSES AUX QUESTIONS COMPLEMENTAIRES CT2:
107 : Oui.
108 : Souvent.
109 : Toujours.
110 : Plutôt oui.
111 : Non.
112 : Oui.
113 : Non.
114 : Oui.
115 : Non.
116 : Oui.
117 : Oui.
118 : Souvent.
119 : Non.
120 : Oui.

VALEURS DES VARIABLES:
pays d'origine :suisse
pays de la mission :bouthan
durée :15
âge :39
mariage :oui
travail en couple :non
enfant(s) :oui


événement :19
évitement: 3
burnout: 2
répétition: 7.5
dissociation: 8.5
symptôme: 21
stress soc: null
stress psy: 0.5
stress physique: 2
stress: 4
activation: 2

 

Le parsing (dans le fichier: feedbackxml.php)

Les "diagnostics" sont rassemblés, pour simplifier la traduction, dans un fichier xml: cphxml.xml. J'ai utilisé trois fonctions adaptées de l'article "Dom Xml: An Alternative to Expat", de Matt Dunford, pour aller rechercher les bons diagnostics, et les afficher en retour. Ces fonctions se trouvent dans feedbackxml.php.

#DOM XML fonctions tirées de l'article "Dom Xml: An Alternative to Expat", de Matt Dunford.
function get_content($parent)
{
$nodes = $parent->children();
while($node=array_shift($nodes))
if($node->type==XML_TEXT_NODE)
return $node->content;
return"";
}

function find_content($parent,$name)
{
$nodes = $parent->children();
while($node = array_shift($nodes))
if ($node->name == $name)
return get_content($node);
return "";
}

$doc = xmldocfile("cphxml.xml") or die("cphxml.xml: qqch ne joue pas.");
$root = $doc->root();
$reponses_children = $root->children();

while($reponse = array_shift($reponses_children))
{
if($reponse==XML_TEXT_NODE)
continue;
$numero = find_content($reponse,"numero");
$txt= find_content($reponse,"texte");
${"reponse$numero"}=$txt;
}

# fin DOM XML

# afficher les diagnostics
if ($varparc == 1) {
if (isset ($evenement)) {
if ($evenement <= 10) {
$repFinale1 = $reponse0;}
elseif ($evenement <= 20) {
$repFinale1 = $reponse1;}
elseif ($evenement > 20) {
$repFinale1 = $repons2;}
print "<font FACE ='Arial'>$repFinale1</font><BR>";
}
if (isset ($symptome)) {
if ($symptome <= 16) {
$repFinale2 = $reponse3;}
elseif ($symptome <= 32) {
$repFinale2 = $reponse4;}
elseif ($symptome > 32){
$repFinale2 = $reponse5;}
print "<font FACE ='Arial'>$repFinale2</font><BR>";
}
if (($evenement + $symptome)<=25) {
$repFinale3 = $reponse6;}
elseif (($evenement + $symptome)<=50) {
$repFinale3 = $reponse7;}
elseif (($evenement + $symptome) > 50){
$repFinale3 = $reponse8;}
print "<font FACE ='Arial'>$repFinale3</font><BR>";

}
if ($varparc == 2) {
if ($burnout <= 8) {
$repFinale1 = $reponse9;}
elseif ($burnout <= 16) {
$repFinale1 = $reponse10;}
elseif ($burnout > 16) {
$repFinale1 = $reponse11;}
print "<font FACE ='Arial'>$repFinale1</font><BR>";
}
if ($varparc == 3){
if ($tousstress <= 19){
$repFinale1 = $reponse12;}
elseif ($tousstress <= 39){
$repFinale1 = $reponse13;}
elseif ($tousstress > 39) {
$repFinale1 = $reponse14;}
print "<font FACE ='Arial'>$repFinale1</font><BR>";
}

 

[Home]

[Travaux]

| Haut | Home | Travaux |