Page 1 sur 1

limite de texte entre les balises xml

Posté : 01 oct. 2005, 21:59
par cahierlabo
Bonjour à tous : un soucis me tracasse. Je travaille avec php 4.3.11 et parse correctement des fichiers "exercices" au format XML pour un affichage convenable sur un site web.
Mais quand le texte entre les balises commence à devenir long,
l'affichage pose des problèmes. Voici le code source de mon objet qui parse les fiches exo au format XML :
<?
class TEval
{
// ________________________________ Les variables internes
	var $l_depth = array();
	var $l_titre = "";
	var $l_b_titre = FALSE;
	var $l_niveau = "";
	var $l_b_niveau = FALSE;
	var $l_reference = "";
	var $l_b_reference = FALSE;
	var	$l_en_tete = "";
	var $l_b_en_tete = FALSE;
	var $l_HQ = array();//texte, points, difficulte
	var $l_nQ = 0; 
	var $l_TbQuestions = array();// of $HQ
	var $l_b_question = FALSE;
	var $l_nR = 0;
	var $l_b_correction = FALSE;
	var $l_TbReponses = array();
	var $l_b_corrIntro = FALSE;
	var $l_corrIntro = "";
	var $l_b_corrFin = FALSE;
	var $l_corrFIn = "" ;
	var $parseur;
	var $l_Somme_Points = 0;
	var $l_difficulte = "";
	var $l_b_difficulte = FALSE;
	var $l_commentaire = "";
	var $l_b_commentaire = FALSE;
	
// ________________________________ Constructeur
	function TEval($aFile)
	{
	$this->parseur = xml_parser_create();
	xml_set_object($this->parseur, &$this);
	// association des fonctions liées au début et à la fin des élements au parseur instancié
	xml_set_element_handler ($this->parseur, "StartElement", "EndElement");
	// association de la fonction pour lire le contenu entre les balises
	xml_set_character_data_handler ($this->parseur, "LitBalise");
	// ouverture du document xml
	$f = fopen ($aFile, "r");
	while ($data = fread($f, filesize($aFile))) { xml_parse($this->parseur, $data, feof($f));}//4096
	xml_parser_free ($this->parseur);
	fclose($f);
	}

// ________________________________ Fonction interne : StartElement 
Function StartElement ($aParseur, $aName, $aAttrs)
	{
	For ($i = 0 ; $i < $this->depth[$aParseur] ; $i++)
    	{
        if ($aName == "TITRE") { $this->l_b_titre = TRUE; } 
		if ($aName == "NIVEAU") {$this->l_b_niveau = TRUE;}
		if ($aName == "DIFFICULTE") {$this->l_b_difficulte = TRUE; }
		if ($aName == "REFERENCE") {$this->l_b_reference = TRUE;}
		if ($aName == "COMMENTAIRE") {$this->l_b_commentaire = TRUE; }
		if ($aName == "INTRO") {$this->l_b_en_tete = TRUE;}
			  if ($aName == "QUESTION") 
			  	{
					$this->l_b_question = TRUE;
					while (list ($key, $val) = each ($aAttrs))
                         {
						 if ($key == "POINTS") 
						 	{
								$this->l_HQ["POINTS"] = $val;
								$this->l_Somme_Points += $val;
							}
						 if ($key == "DIFFICULTE") {$this->l_HQ["DIFFICULTE"] = $val;}
						 }// while
				}// if question
		if  ($aName == "CORRECTION-INTRO") {$this->l_b_corrIntro = TRUE;}
		if ($aName == "CORRECTION-FIN") {$this->l_b_corrFin = TRUE;}
		if ($aName == "REPONSE")  { $this->l_b_correction = TRUE;}
              }// end for
    $this->depth[$aParseur]++;
	}// fin de Fonction StartElement

// ________________________________ Fonction interne : LitBalise

function LitBalise ($aParseur, $aText)
	{
	if ($this->l_b_titre) {$this->l_titre = TEval::crochet2chevron($aText); }
	if ($this->l_b_niveau) {$this->l_niveau = $aText;}
	if ($this->l_b_difficulte) {$this->l_difficulte = $aText;}
	if ($this->l_b_reference) {$this->l_reference = $aText;}	
	if ($this->l_b_commentaire) {$this->l_commentaire = TEval::crochet2chevron($aText);}
	if ($this->l_b_en_tete) {$this->l_en_tete = TEval::crochet2chevron($aText);}
	if ($this->l_b_question)
		{
		$this->l_HQ["TEXTE"] = TEval::crochet2chevron($aText); 
		$this->l_TbQuestions[$this->l_nQ] = $this->l_HQ;
		$this->l_nQ++;
		}
	if ($this->l_b_correction) 
		{
		$this->l_TbReponses[$this->l_nR] = TEval::crochet2chevron($aText);
		$this->l_nR++;
		}
	if ($this->l_b_corrIntro) {$this->l_corrIntro = TEval::crochet2chevron($aText);}
	if ($this->l_b_corrFin) {$this->l_corrFin = TEval::crochet2chevron($aText);}
     }
	 
// ________________________________ Fonction interne : EndElement
function EndElement ($aParseur, $aName)
	{
	if ($aName == "TITRE") { $this->l_b_titre = FALSE; } 
	if ($aName == "NIVEAU") {$this->l_b_niveau = FALSE;}
	if ($aName == "DIFFICULTE") {$this->l_b_difficulte = FALSE;}
	if ($aName == "COMMENTAIRE") {$this->l_b_commentaire = FALSE;}
    if ($aName == "REFERENCE") {$this->l_b_reference = FALSE;}
	if ($aName == "INTRO") {$this->l_b_en_tete = FALSE;}
	if ($aName == "QUESTION") {$this->l_HQ = array(); $this->l_b_question = FALSE;} 
	if ($aName == "REPONSE") {$this->l_b_correction = FALSE; } 
	if  ($aName == "CORRECTION-INTRO") {$this->l_b_corrIntro = FALSE;}
	if ($aName == "CORRECTION-FIN") {$this->l_b_corrFin = FALSE;}
    $this->l_depth[$aParseur]-- ;	
    }// fin de EndElement

// ________________________________ Fonction interne : crochet2chevron
function crochet2chevron ($aPhrase)
{
	$intermediaire =  ereg_replace("\[", "<", $aPhrase);
	return ereg_replace("\]", ">", $intermediaire);
}	

// ________________________________ Fonction GET : get_titre
function get_titre() { return $this->l_titre; }

// ________________________________ Fonction GET : get_entete
function get_entete() { return $this->l_en_tete;}

// ________________________________ Fonction GET : get_questions
function get_questions() {return $this->l_TbQuestions ; }

// ________________________________ Fonction GET : get_correction
function get_correction() {return $this->l_correction ;}

// ________________________________ Fonction GET : get_points
function get_points() {return $this->l_Somme_Points; }

// ________________________________ Fonction GET : get_difficulte
function get_difficulte() {return $this->l_difficulte;}

// ________________________________ Fonction GET : get_niveau
function get_niveau() {return $this->l_niveau ;}

// ________________________________ Fonction GET : get_commentaire
function get_commentaire() {return $this->l_commentaire;} 

// ________________________________ Fonction GET : get_reference
function get_reference() {return $this->l_reference; }

// ________________________________ Fonction GET : get_reponses
function get_reponses() {return $this->l_TbReponses ;}

// ________________________________ Fonction GET : get_corrIntro
function get_corrIntro() {return $this->l_corrIntro;}

// ________________________________ Fonction GET : get_corrFin
function get_corrFin() {return $this->l_corrFin;}

// ________________________________ Fonction GET :
}
?>
Enfin voici un extrait d'une fiche xml qui pose probleme :
(dernière question à 3 points, difficulté B
=> donnée placées dans un tableau pour affichage html)

Code : Tout sélectionner

<sujet> <intro></intro> <question points="1" difficulte="A">En quoi consiste une voltampérométrie ?</question> <question points="1" difficulte="A">Faire le schéma de l'expérience.</question> <question points="3" difficulte="B">Un élève recueille les valeurs suivantes :[table width="75%" border="1"] [tr bgcolor="#cccccc"] [td] [center]U[/center] [/td] [td] [center]I[/center] [/td] [td] [center]U[/center] [/td] [td] [center]I[/center] [/td] [/tr] [tr bgcolor="#cccccc"] [td] [center]V[/center] [/td] [td] [center]mA[/center] [/td] [td] [center]V[/center] [/td] [td] [center]mA[/center] [/td] [/tr] [tr] [td] [center]0,49[/center] [/td] [td] [center]27[/center] [/td] [td] [center]2,49[/center] [/td] [td] [center]139[/center] [/td] [/tr] [tr] [td] [center]0,98[/center] [/td] [td] [center]54[/center] [/td] [td] [center]3,01[/center] [/td] [td] [center]169[/center] [/td] [/tr] [tr] [td] [center]1,47[/center] [/td] [td] [center]82[/center] [/td] [td] [center]3,49[/center] [/td] [td] [center]197[/center] [/td] [/tr] [tr] [td] [center]2[/center] [/td] [td] [center]111[/center] [/td] [td] [center]3,98[/center] [/td] [td] [center]225[/center] [/td] [/tr] [/table] [br]Faire le graphique exprimant la tension ( en ordonnée) en fonction de l'intensité du courant électrique (en abscisse) en choisissant pour échelles (abscisses : 1 cm pour 20 mA ; ordonnées : 1 cm pour 1 V).</question> <question points="2" difficulte="B">Déterminer la valeur globale du résistor.</question> </sujet>
:shock:
Puis-je avoir une réponse pour savoir comment afficher des textes plutôt long
entre balises XML ?
Dois-je toucher dans le php.ini ?
Est-ce un problème interne pour lequel il n'y a rien à faire ?
Merci davance pour toute reponse. :wink:

Posté : 01 oct. 2005, 22:26
par Truc
record de la barre de défilement horizontale battu :shock:

sinon pour ton probleme en mettant des espaces...?

Posté : 01 oct. 2005, 22:49
par Cyrano
Modération : J'ai édité et remis en page ton sujet cahierlabo, tu es invité à aller lire les règles du forum. Après, on s'occupera peut-être de ton code.

essais : ajout d'espace.

Posté : 02 oct. 2005, 10:11
par cahierlabo
L'ajout d'espace ne change rien, au contraire.
Par contre, la suppression de la phrase "[br] Faire le graphique ...", permet un affichage convenable !
Pourtant je veux cette phrase en dessous de mon tableau . :oops:
J'ai bien peur de devoir longer le mur avec un peu plus que 2 pas :?

Posté : 02 oct. 2005, 11:07
par Cyrano
Je ne sais pas dans quelle mesure ça influence le résultat, mais tu as une erreur dans la méthode StartElement(), la dernière instruction:
$this->depth[$aParseur]++;
Ne devrait-elle pas être :
$this->l_depth[$aParseur]++;
:?:

Re: essais : ajout d'espace.

Posté : 02 oct. 2005, 17:59
par h2o
Par contre, la suppression de la phrase "[br] Faire le graphique ...", permet un affichage convenable !
Si [br] = un retour à la ligne, alors essaie [br/] ?

Posté : 02 oct. 2005, 18:27
par cahierlabo
Hélas, deux fois hélas :
j'ai corrigé le l_depth en deux endroits d'ailleurs mais sans effet !
L'ajout du slash dans [br \] ne change rien non plus !

C'est comme si le parseur était limité en capacité texte et tronque ce dernier là :
... tableau affiché puis ->

Code : Tout sélectionner

Faire le graphique exprimant la tension ( en ordonnée) en fonction de l'intensité du courant électrique[-(
Par la même occasion, je tenais à remercier toutes ces personnes qui répondent avec une rapidité qui me laisse sur place ![/code]

Posté : 02 oct. 2005, 18:28
par Invité
Hélas, deux fois hélas :
j'ai corrigé le l_depth en deux endroits d'ailleurs mais sans effet !
L'ajout du slash dans [br /] ne change rien non plus !

C'est comme si le parseur était limité en capacité texte et tronque ce dernier là :
... tableau affiché puis ->

Code : Tout sélectionner

Faire le graphique exprimant la tension ( en ordonnée) en fonction de l'intensité du courant électrique[-(
Par la même occasion, je tenais à remercier toutes ces personnes qui répondent avec une rapidité qui me laisse sur place ![/code]

Posté : 02 oct. 2005, 18:54
par cahierlabo
Pour visualiser plus concretement le problème voici la page en question :
http://cahierlabo.free.fr/ma_zone_de_te ... =Ohm&num=1
Dans l'énoncé, la question 4 ne devrait avoir lieu. C'est comme si la 3 avait interrompue puis reprise en tant que nouvelle question !

Merci.

Posté : 09 oct. 2005, 10:34
par cahierlabo
J'ai résolu mon problème en utilisant DOMXML plutôt qu 'EXPAT. :D