8791 sujets

Développement web côté serveur, CMS

Salut,

j'ai un problème de dimensionnement de tableau, à mon avis.

Je parse des fichiers XML et pour cela j'utilise les fonctions xml_set_element_handler() et xml_set_character_data_handler(). Dans ma fonction de lecture des données, j'utilise un tableau associatif défini en global. Ca donne la chose suivante :

$tableau[$nom_de_la_balise] = $contenu de la balise

Une fois arrivé à la balise qui ferme l'élément, je fais une requete SQL d'insertion dans une base de données en récuperant les données de l'élément lu via le tableau.

Comme j'ai appris le XML en autodidacte ce n'est peut-être pas la meilleure solution mais elle fonctionne. Sauf que je me retrouve désormais avec le cas suivant :
certains contenu de balise sont très grands (beaucoup de texte) et du coup ma case de tableau semble trop petite puisqu'elle ne contient que la fin du contenu (298 caractères apparement, si je n'ai pas mal compté Smiley bawling )

Est-ce que quelqu'un voit comment regler le problème ?

Merci !
Modifié par Ondskapt (25 Jul 2007 - 14:59)
bonjour,

J'ai pas parfaitement compris oO ton tableau se trouve dans ta bdd ? donc faudrai que tu changes les champs qui s'y trouve si tu veux augmenter la taille.
Non, je range le contenu des balises dans un tableau PHP et quand j'arrive à la fin de mon élément XML, je fais une requete d'insertion en lisant les données du tableau.
ah d'accord pardon Smiley confused

C'est bizarre quand même que ton tableau en php soit limité, car j'utilise un tableau php moi aussi et j'ajoute tout une page web dedans et je la recupere sans probleme..

Tu as verifié que ton $contenu ne bug pas ?
J'ai détourné provisoirement le problème en faisant un truc horrible : une concaténation de chaine en mettant les uns après les autres les lectures des balises ($contenu, donc) et dans ce cas là ce qui est lu est bien entier. Donc ce qui sort du XML est bien entièrement lu. C'est donc bien le stockage dans la case de mon tableau PHP qui pose problème.

Avec le PHP j'ai perdu l'habitude de déclarer mes variables, il faudrait que je déclare "proprement" mon tableau ?
Le Parser XML sous sa forme evenementiel fonctionne sur un flux. C'est d'ailleur un de ses avantage: il n'a pas besoins d'avoir la totalité du fichier en mémoire pour travailler.
Mais cela implique qu'il peut recevoir le contenu de ta balise en plusieurs fois. Ce qui aura comme effet plusieurs appels consécutifs à la fonction donnée à xml_set_character_data_handler().

Exemple:
avec le code suivant
<balise>
   ligne 1
   ligne 2
</balise>

La fonction de gestion des données peut recevoir la totalité du contenu d'un coup, mais également ligne 1 lors d'un premier appel puis ligne 2 lors d'un second.


Vu ce que tu décris je penses que le problème vient de là. Et seul le dernier appel est pris en compte ce qui explique pourquoi tu n'as que la fin de ton contenu.
Ah excellent, merci beaucoup !

J'ai du coup simplement remplacé

$tableau[$balise] = $data

par

$tableau[$balise] .= $data

et ça fonctionne de suite.

Merci pour le tuyau Smiley smile
Modifié par Ondskapt (25 Jul 2007 - 14:58)