|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : avril 2010 Messages : 35 ![]() |
Bonjour,
Tout d'abord je tiens a m'excuser pour l'absence d'accents dans mon texte, je vous ecris depuis un clavier qwerty. Je suis actuellement en stage aux USA et je suis confronte a un probleme que je n'arrive pas a resoudre depuis ce matin. Je dois lire tous les fichiers XML d'un dossier et ecrire leur contenu dans une base MySQL. Tout est ok, j'ai presque fini a vrai dire. Il ne me reste qu'un probleme : certaines valeurs (chaines) sont tronquees, c'est a dire que la partie de la chaine se trouvant juste avant une apostrophe est supprimee. J'utilise la fonction xml_set_character_data_handler($XMLparser, "functionText"); ou functionText est la fonction appellee en callback (voir mon code ci-dessous). Qui dit callback dit (je suppose ?) pas de variable retournee, donc je suis oblige d'utiliser des variables globales. Et a cause du switch, je ne peux pas effectuer mon traitement SQL directement dans ma fonction appellee en callback. Bref, je dois faire passer mes variables a l'exterieur de la fonction. Sauf que j'ai ce probleme de variable tronquee avant une quote. Quand j'echo ma variable dans la fonction, c'est ok. Par exemple : Citation:
Citation:
J'ajoute que les fichiers XML sont generes dynamiquement par un AppleScript qui les exporte depuis Adobe InDesign. Mais quand on les ouvre avec un fichier texte tout est ok niveau encodage. A terme, les donnees sont enregistrees dans le BDD en UTF-8. Voici une partie de mon code : Code :
|
||||
|
|
00
|
|
|
#2 | ||
|
Membre chevronné
![]() Fred Professeur des Ecoles Inscription : mai 2009 Messages : 503 ![]() |
Bonjour,
Est-ce que la réponse ne serait pas là ? Sinon, plus généralement, pourquoi ne pas encapsuler tes fonctions de rappel dans une classe, les tags et les nœuds de texte devenant des attributs de cette classe. (ainsi, plus besoin de variables globales). En procédant de la sorte, pour chaque fichier xml, tu créeras une instance de cette classe et à l'aide de la fonction xml_set_object, tu rendras le parser utilisable depuis cet objet (toutes les méthodes de rappel, affectées par xml_set_element_handler(), seront les méthodes de celui-ci). Ce qui donnerait (à la louche) : Code :
|
||
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : avril 2010 Messages : 35 ![]() |
Bonjour !
Je ne peux que te remercier. Aujourd'hui j'ai accès à mon ordinateur donc je peux écrire avec les accents (c'est tellement mieux). Hier après-midi en voyant ton post et ton lien vers une réponse possible, j'ai pensé que ce n'était pas ce que je recherchais, persuadé que ce que mon parseur XML tirait était correct. J'ai donc appliqué la solution donnée dans la suite de ton post, j'ai tout passé en classes, avant de m'apercevoir du même problème. C'est en refaisant des test (echo des morceaux de textes tirés du XML) que j'ai compris que la chaîne était coupée en deux et que par conséquent ton lien menait vers ma solution. Ce n'est pas un mal puisque c'est un peu plus propre avec cette classe. Du coup, il faut en effet concaténer la chaîne et non pas l'affecter, car la méthode qui lit le texte peut être appelée plusieurs fois avec le même "lastTagRead". Ce qui implique de ne pas initialiser les attributs de la classe à NULL mais à "" (chaîne vide). Je te remercie énormément, le script est fonctionnel du coup. D'un clic on lit un ensemble de fichiers InDesign et quelques secondes plus tard les infos sont dans la base. :p Encore merci, bonne journée. |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : mai 2009 Messages : 11 ![]() |
Juste un gros merci pour prendre la peine d'écrire aussi bien !!!!!
![]() Et merci pour cette solution également. |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : avril 2010 Messages : 35 ![]() |
Pas de problème !
Bon courage. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com