PHP-DOMXML modifier doctype

PHP-DOMXML modifier doctype - PHP - Programmation

Marsh Posté le 16-12-2004 à 10:34:33    

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

Reply

Marsh Posté le 16-12-2004 à 10:34:33   

Reply

Marsh Posté le 16-12-2004 à 16:17:27    

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

Reply

Sujets relatifs:

Leave a Replay

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