indentation d'un flux XML - script PHP ?

indentation d'un flux XML - script PHP ? - PHP - Programmation

Marsh Posté le 19-02-2008 à 09:39:29    

Bonjour à tous,
 
après de nombreuses recherches, je ne trouve pas de fonction PHP simple qui à partir d'un flux XML comme celui-ci :
 

Code :
  1. <TOTO><BALISE>contenu</BALISE></TOTO>


 
soit tout simplement indenté en (html) :
 

Code :
  1. <TOTO>
  2.     <BALISE>
  3.         contenu
  4.     </BALISE>
  5. </TOTO>


 
pour l'affichage dans un page html !
 
Merci d'avance !

Reply

Marsh Posté le 19-02-2008 à 09:39:29   

Reply

Marsh Posté le 20-02-2008 à 09:57:21    

on dirait que personne n'a jamais essayé de faire cela ... ! c'est fou !?

Reply

Marsh Posté le 20-02-2008 à 10:20:37    

nan mais c'est surtout au choix  pas clair ou un peu stupide...
 
Tu veux transformer ton flux xml et un "code source" html indenté ou tu veux qu'à partir de ton code xml soit produit un code html qui affiche le 1er de manière indenté dans le navigateur?
 


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 20-02-2008 à 10:34:19    

merci pour ton aide;
 
je veux transformer mon 1er flux XML (brut sans mise en forme) en code HTML pour pouvoir l'afficher dans le navigateur, soit plus précisément
 

Code :
  1. &lt;TOTO&gt;
  2. &nbsp;&nbsp;&lt;BALISE&gt;
  3. &nbsp;&nbsp;&nbsp;&nbsp;contenu
  4. &nbsp;&nbsp;&lt;/BALISE&gt;
  5. &lt;/TOTO&gt;


 
J'espère être plus clair !

Reply

Marsh Posté le 20-02-2008 à 13:29:41    

http://fr.php.net/xml => exemple #1


---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 20-02-2008 à 16:17:32    

Y'a moyen, exemple sous PHP5 :

Code :
  1. $xml =
  2.    '<?xml version="1.0" encoding="utf-8" ?>' . "\n" .
  3.    '<TOTO><BALISE>contenu</BALISE></TOTO>';
  4.  
  5.  
  6. $dom = new DomDocument;
  7. $dom->loadXML($xml);
  8. $dom->formatOutput = true;
  9.  
  10. echo $dom->saveXML();
 

Résultat :

Code :
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TOTO>
  3.  <BALISE>contenu</BALISE>
  4. </TOTO>



Message édité par FlorentG le 20-02-2008 à 16:17:40
Reply

Marsh Posté le 20-02-2008 à 16:47:22    

je vous remercie pour vos réponses,mais FlorentG, j'obtiens l'erreur fatale  

Code :
  1. PHP Fatal error:  Class 'DOMDocument' not found


 
Je me demande pourquoi car d'après la doc PHP,  
"Il n'y pas d'installation nécessaire pour utiliser ces fonctions, elles font parties du coeur de PHP.".
 
pour info, j'ai PHP Version 5.2.3.
 
------
pour anapajari, ça ressemble à ce que je veux mais mon flux XML peut être faux, et cela ne m'affiche que les noms, en majuscule... (sans les < et > !)

Reply

Marsh Posté le 20-02-2008 à 17:21:00    

Oula [:pingouino] Ca c'est pas normal

Reply

Marsh Posté le 21-02-2008 à 16:02:33    

bon va falloir trouver une autre technique, je n'ai pas la main sur mon serveur PHP : il est configuré avec "'--disable-dom' "

Reply

Marsh Posté le 21-02-2008 à 16:28:12    

Oh puté, ça c'est vraiment pas sympa [:pingouino] Ca risque même de poser d'énormes problèmes

Reply

Marsh Posté le 21-02-2008 à 16:28:12   

Reply

Marsh Posté le 21-02-2008 à 16:46:35    

c'est clair car ta technique, Florent, aurait été particulièrement intéressante !
 

Code :
  1. $html = preg_replace('!(&lt;.+&gt;)(.*)(&lt;/.+&gt;)!iU', '&nbsp;&nbsp;$1<br />&nbsp;&nbsp;&nbsp;&nbsp;$2<br />&nbsp;&nbsp;$3<br />',$html);


 
avec une expression régulière je parviens à cela :
 

Code :
  1. <?xml version="1.0" encoding="utf-8"  ?>
  2.     <html><body>test
  3.   </body>
  4. </html>


 
mais ce n'est pas le top... je travaille dessus.
 
Je pense qu'il faudrait un traitement récursif ou quelque chose comme ça...

Reply

Marsh Posté le 21-02-2008 à 16:51:10    

faut frapper l'admin system :d
lol

Reply

Marsh Posté le 02-12-2009 à 20:10:30    

Voici la fonction que j'utilise pour indenter mon code HTML :
 

Code :
  1. private function indent () {
  2.  $stringIndented=NULL;
  3.  $indexStringIndented=0;
  4.  $indentationLevel=0;
  5.  for ($i=0;$i<strlen($this->html);++$i) {
  6.   $char=substr($this->html,$i,1);
  7.   switch ($char) {
  8.    case '<':
  9.     if (substr($this->html,$indexStringIndented+1,1)=='/') {
  10.      --$indentationLevel;
  11.      while(substr($this->html,$i,1)!='>') ++$i;
  12.      for ($j=0;$j<$indentationLevel;++$j) $stringIndented.="\t";
  13.      $stringIndented.=substr($this->html,$indexStringIndented,$i+1-$indexStringIndented);
  14.      $stringIndented.="\n";
  15.      $indexStringIndented=$i+1;
  16.     }
  17.     else if (substr($this->html,$indexStringIndented+1,1)!='/') {
  18.      while(substr($this->html,$i,1)!='>') ++$i;
  19.      if (substr($this->html,$i-1,1)!='/') {
  20.       for ($j=0;$j<$indentationLevel;++$j) $stringIndented.="\t";
  21.       $stringIndented.=substr($this->html,$indexStringIndented,$i+1-$indexStringIndented);
  22.       $stringIndented.="\n";
  23.       $indexStringIndented=$i+1;
  24.       ++$indentationLevel;
  25.      } else {
  26.       for ($j=0;$j<$indentationLevel;++$j) $stringIndented.="\t";
  27.       $stringIndented.=substr($this->html,$indexStringIndented,$i+1-$indexStringIndented);
  28.       $stringIndented.="\n";
  29.       $indexStringIndented=$i+1;
  30.      }
  31.     }
  32.     break;
  33.    default:
  34.     if (substr($this->html,$i+1,1)=='<') {
  35.      for ($j=0;$j<$indentationLevel;++$j) $stringIndented.="\t";
  36.      $stringIndented.=substr($this->html,$indexStringIndented,$i+1-$indexStringIndented);
  37.      $stringIndented.="\n";
  38.      $indexStringIndented=$i+1;
  39.     }
  40.   }
  41.  }
  42.  $this->html=$stringIndented;
  43. }

Reply

Marsh Posté le 02-12-2009 à 22:16:08    

[:pseudo ______]

Reply

Marsh Posté le 03-12-2009 à 11:55:36    

piratox > t'as pas DomDocument ?

Reply

Sujets relatifs:

Leave a Replay

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