[Résolu] [PHP] SimpleXML sur formulaire pdf

SimpleXML sur formulaire pdf [Résolu] [PHP] - PHP - Programmation

Marsh Posté le 18-02-2009 à 15:07:24    

Bonjour,
 
J'utilise simplexml pour entrer les réponses d'un formulaire pdf (fait avec livecycle) vers une base de donnée MySQL.
 
Le problème est lorsqu'un champs n'est pas remplit, le fichier xml qui est créé ressemble à ça (dans le cas du téléphone pas renseigné) :  
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <formulaire>
  3.  <Prenom>Mon prénom</Prenom>
  4.  </Telephone>
  5.  <code_postal>mon code postal</code_postal>
  6.  <Pseudo>mon pseudo</Pseudo>
  7. </formulaire>


 
La forme "</Telephone>" alors qu'aucune balise n'a été ouverte ne plait pas à simple xml, j'aurais aimé savoir comment ignoré ces balises. J'ai bien l'astuce de rendre tous les champs obligatoire à la création du formulaire en leur donnant une valeur par défaut " " mais c'est vraiment une bidouille qui ne me plait pas trop.
 
La ligne qui pose le problème est lors du chargement du fichier: simplexml_load_file($xmlstr);
 
L'erreur :

Code :
  1. Warning: simplexml_load_file() [function.simplexml-load-file]: file:///C:/Program%20Files/wamp/tmp/php19.tmp:4: parser error : Opening and ending tag mismatch: racine line 2 and telephone in C:\Program Files\wamp\www\PDFatMySQL\traitement_pdf.php on line 16


Qui se répercute sur le reste du fichier :

Code :
  1. Warning: simplexml_load_file() [function.simplexml-load-file]: <code_postal>mon code postal</code_postal> in C:\Program Files\wamp\www\PDFatMySQL\traitement_pdf.php on line 16


 
Une partie de la source php :

Code :
  1. //Chargement du fichier XML
  2. if (file_exists($xmlstr)) {
  3. $xml = simplexml_load_file($xmlstr);
  4. } else {
  5. exit('Echec lors de l\'ouverture du fichier');
  6. }
  7. //Récupération des variables
  8. $Nom = $xml->Nom;


 
Merci à ceux qui pourront m'aider.


Message édité par PM95 le 18-02-2009 à 17:10:54
Reply

Marsh Posté le 18-02-2009 à 15:07:24   

Reply

Marsh Posté le 18-02-2009 à 15:12:27    

Vu ce que tu racontes la question est surtout la suivante :
Pourquoi est ce que t'as une balise fermante pour les options non renseigné quand la balise ouvrante n'est présente que quand on renseigne les options?
 
Quand à simplexml, c'est normal qu'il gueule, tu lui demandes de parser un fichier invalide.

Reply

Marsh Posté le 18-02-2009 à 15:34:35    

Ca je sais bien, c'est adobe qui merde quand il crée le xml de réponse. Il est crée automatiquement par acrobat, donc je ne peut pas agir dessus à la base.
 
Je voudrais donc, avant de traité le fichier xml, le rendre valide avec php.
 
Donc le pourquoi en fait, et bien je ne sais pas pourquoi acrobat crée des fichiers xml invalide. Sûrement parce que ça leur convient pour les traiter par leur logiciel et n'ont pas pensé qu'on voudrait l'utiliser en dehors.

Reply

Marsh Posté le 18-02-2009 à 16:20:34    

Si tu veux rendre le document valide alors tu n'as qu'une seule solution : te créer un analyseur cherchera les balises manquante.
Là où tu vas t'amuser, c'est pour faire la différence entre les balises fermantes qui manquent et les balises ouvrantes qui manquent sauf si tu te fais un dtd sur lequel l'analyseur se base pour deviner précisément qu'elle erreur il a détecté (balise fermante orpheline, balise fermante manquante et du coup celle trouvé ne correspond pas à la dernière balise ouvrante qui n'a pas de balise fermante, inversion dans l'ordre des balises, ...).

Reply

Marsh Posté le 18-02-2009 à 16:53:15    

Ok, merci pour ta réponse. Ca m'emballe pas vraiment, je vais y passer trop de temps vu mon niveau d'amateur.
Je vais voir s'il y a un moyen en manipulant directement le pdf, peut être avec un javascript.

Reply

Marsh Posté le 18-02-2009 à 17:10:32    

Bon, je suis trop mauvais. Il y a une option pour éviter les veuves et orpheline dans livecyle, mais pas activé à la base.
 
Désolé pour le dérangement et merci pour ton aide omega2.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed