Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
981 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  PHP-DOMXML modifier doctype

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

PHP-DOMXML modifier doctype

n°924803
lotus81
Posté le 16-12-2004 à 10:34:33  profilanswer
 

Bonjour,
En fait j'upload sur mon disque un fichier xml et je veut verifier qu'il est valide avec MA DTD automatiquement. je sais comment verifier qu'un document XML est valide à partir de sa declaration de doctype en php, mais seulement avec la dtd qui est declaré dans le fichier XML.
je me demande si on peut modifier le doctype d'un fichier XML par un script php ... je chercher de la documentation ... car la plupart des fonctions sont en lecture seul... et je n'arrive pas à trouver de la documentation sur les fonctions qui permettent de modifier le document XML.  
 
Merci de votre aide

mood
Publicité
Posté le 16-12-2004 à 10:34:33  profilanswer
 

n°925148
lotus81
Posté le 16-12-2004 à 16:17:27  profilanswer
 

voila  
ca marche j'ai ecrits deux script php ...
ils sont loin d'être parfait mais je les mets à disposition, en cas ca interresse quelqu'un...
dans ce premier code: il faut obligatoirement qu'il y est une declaration de dtd et qu'elle soit plus longue que la nouvelle declaration...

Code :
  1. <?php
  2. function RemplacerDeclarationDtd($fichier,$NewDeclarationDtd)
  3. {
  4. if (file_exists("$fichier" ))
  5. {
  6. if($id = fopen("$fichier", "r+" ))
  7. {
  8. $contenu_original = fread ($id, 20000000);
  9. $retour="\n";
  10. $findmeDeb = "<!DOCTYPE";
  11. $findmeFin = "\">";
  12. $posDeb=strpos($contenu_original, $findmeDeb);
  13. $posFin=strpos($contenu_original, $findmeFin);
  14. $DeclarationDtdAvant=substr($contenu_original,$posDeb,$posFin);
  15. $TailleAvant=strlen($DeclarationDtdAvant);
  16. echo "$TailleAvant\n";
  17. $TailleApres=strlen($NewDeclarationDtd);
  18. echo "$TailleApres\n";
  19. $Espace=$TailleAvant-$TailleApres;
  20. echo "$Espace\n";
  21. while ($Espace>0)
  22. {
  23. $esp=" ".$esp;
  24. $Espace=$Espace-1;
  25. }
  26. $nouveau_contenu= str_replace($DeclarationDtdAvant,$NewDeclarationDtd.$esp,$contenu_original);
  27. rewind($id);
  28. fputs ($id, $nouveau_contenu);
  29. fclose($id);
  30. return ok;
  31. }
  32. else
  33. {
  34. return pb_ouv;
  35. }
  36. }
  37. else
  38. {
  39. return no_file;
  40. }
  41. }
  42. $pathfichier="MonFichier.xml";
  43. $NewDeclarationDtd="<!DOCTYPE PubmedArticleSet SYSTEM \"MaDTD.dtd\">";
  44. RemplacerDeclarationDtd($pathfichier,$NewDeclarationDtd);
  45. ?>


 
dans le second code je crois que ca marche dans tous les cas...
 

Code :
  1. <?php
  2. function Ajouter_Au_Debut($fichier, $texte)
  3. {
  4. if (file_exists("$fichier" ))
  5. {
  6. if($id = fopen("$fichier", "r+" ))
  7. {
  8. $contenu_original = fread ($id, 20000000);
  9. $retour="\n";
  10. $nouveau_contenu=$texte.$retour.$contenu_original;
  11. rewind($id);
  12. fputs ($id, $nouveau_contenu);
  13. fclose($id);
  14. return ok;
  15. }
  16. else
  17. {
  18. return pb_ouv;
  19. }
  20. }
  21. else
  22. {
  23. return no_file;
  24. }
  25. }
  26. function Supprimer_Le_Debut($fichier,$findme)
  27. {
  28. if (file_exists("$fichier" ))
  29. {
  30. if($id = fopen("$fichier", "r+" ))
  31. {
  32. $contenu_original = fread ($id, 20000000);
  33. $retour="\n";
  34. $pos = strpos($contenu_original, $findme);
  35. $taille=$pos;
  36. while($taille>0)
  37. {
  38. $espace=" ".$espace;
  39. $taille=$taille-1;
  40. }
  41. $new_string = substr($contenu_original,$pos,strlen($contenu_original )).$espace;
  42. rewind($id);
  43. fputs ($id, $new_string);
  44. fclose($id);
  45. return ok;
  46. }
  47. else
  48. {
  49. return pb_ouv;
  50. }
  51. }
  52. else
  53. {
  54. return no_file;
  55. }
  56. }
  57. $pathfichier="MonFichier.xml";
  58. $findme = '?>';
  59. Supprimer_Le_Debut($pathfichier,$findme);
  60. $findme = '<';
  61. Supprimer_Le_Debut($pathfichier,$findme);
  62. $findme = 'DOCTYPE';
  63. Supprimer_Le_Debut($pathfichier,$findme);
  64. $findme = '<';
  65. Supprimer_Le_Debut($pathfichier,$findme);
  66. $newDTD="\n";
  67. Ajouter_Au_Debut($pathfichier,$newDTD);
  68. $newDTD="<!DOCTYPE PubmedArticleSet SYSTEM \"MaDTD.dtd\">";
  69. Ajouter_Au_Debut($pathfichier,$newDTD);
  70. $newDTD="\n";
  71. Ajouter_Au_Debut($pathfichier,$newDTD);
  72. $newDTD="<?xml version=\"1.0\"?>";
  73. Ajouter_Au_Debut($pathfichier,$newDTD);
  74. ?>


 
bye


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  PHP-DOMXML modifier doctype

 

Sujets relatifs
recherche un script PHP style groupware --> gestion de points membresRécupérer le corp d'un script php
Recherche personne ki a fait marcher Pervasive SQL et php sous Linux[PHP] cookie + IE6 (P3P) à l'aide !!!
Pb d'optimisation php/mysql[JS, PHP] Rafraichissement
bouton en phpPHP et Javascript
[SQL/PHP] Probleme avec la fonction MAX()Tuto des scripts PHP les plus demandés et des astuces.
Plus de sujets relatifs à : PHP-DOMXML modifier doctype


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR