begin process at 2012 05 28 15:45:59
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Divers

 > 

Algorithme de parsing ...


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Algorithme de parsing ...

lundi 26 février 2007 à 14:48:31 | Algorithme de parsing ...

LocalStone

Salut à tous,
Une fois n'est pas coutume, j'ai une petite question n'a pas de rapport direct avec le PHP puisque c'est plus une question d'algorithmie.
Je suis en train de faire une petite classe pour parser du HTML. Et pour l'instant, je veux juste savoir si une balise est ouvrante ou fermante ou alors si c'est un noeud de texte, sachant que je ne peux lire la source que mot par mot. Pour cela, ma classe possède une petite méthode jHtmlParser :: readNextToken() qui se charge de faire ça (sachant qu'un token, c'est soit "<", soit ">", soit "/", soit une chaine de caractère entre simple ou double quote soit un mot (html, div, onload, ...)). Je précise que si je fais ce choix de parsing à la volée, c'est pour que le parsing soit le plus rapide possible.
La fonction principale jHtmlParser :: parse() est codée comme cela :

      public function parse()
      {
         $text = '';
         while(!$this -> isEndOfSource())
         {
            $token = $this -> readNextToken();
            if($token == '<')
            {
               if(trim($text) != '')
               {
                  echo "On a un noeud de texte : $text. \n";
               }
               $text = '';
              
               $token = $this -> readNextToken();
               if($token == '/')
               {
                  $token = $this -> readNextToken();
                  echo "on a une balise fermante : $token. \n";
                  $this -> readNextToken();
               }
               else
               {
                  echo "On a une balise ouvrante : $token dont les attributs sont : \n";
                  $attributes = array();
                  while(true)
                  {
                     $token = $this -> readNextToken();
                    
                     if($token == '/') $token = $this -> readNextToken();
                     if($token == '>') break;
                    
                     $key = $token;
                     if($this -> readNextToken() != "=")
                        throw new Exception("???");
                     $value = $this -> readNextToken();
                    
                     $attributes[$key] = $value;
                  }
                  echo "Dont les attributs sont : ";
                  print_r($attributes);
               }
            }
            else
            {
               $text .= ' '.$token;
            }
         }
     
      }


Alors l'avantage, c'est que ça marche plutôt bien. Mais le soucis, c'est que c'est moche. Surtout l'astuce pour récuperer les noeuds de texte. Alors si quelqu'un à une bonne solution à proposer ... Je suis preneur !

LocalStone
mercredi 28 février 2007 à 12:56:10 | Re : Algorithme de parsing ...

coucou747

Administrateur CodeS-SourceS
Salut,

personellement, j'aurais fait une pile, ca permet de verifier en meme temps l'ordre des balises...

le result aurait ete une pile de balises ouvertes, et un tableau de texte


In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)
mercredi 28 février 2007 à 13:44:24 | Re : Algorithme de parsing ...

LocalStone

Euh ... J'ai pas tout compris ! Mais l'idée de la pile est interessante. Tu peux détailler un peu ?
Merci !
LocalStone
mercredi 28 février 2007 à 18:19:37 | Re : Algorithme de parsing ...

coucou747

Administrateur CodeS-SourceS
Salut,

en C++ :

tu te fais une class Balise (gestion des attribnuts ect...)
tu te fais une classe ParseurXML (le html etant proche....)

dans ParseurXML, une liste se String et une liste de Balise et une pile string pour le nom des balises (generer des erreurs lors des rencontres de balises croisees par exemples ou balises non fermees)

quand tu croises une balise, tu l'empile et la place dans la liste, quand tu croises la fermeture, tu la depiles. ensuite, soit tu geres le texte avec un truc qui contiendrait le debut et la fin de chaque balise (dans ce cas, la liste de String ne sert a rien) soit dans la liste de String, tu places toutes les chaines entre les balises


In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy

Mon site (articles sur la programmation et programmes)


Cette discussion est classée dans : text, echo, parsing, token, readnexttoken


Répondre à ce message

Sujets en rapport avec ce message

aide pour mon moteur de recherche [ par kroland ] j'aurai besoin d'aide pour mon moteur de recherche tout simple que je tante de concevoir... voila le code que j'ai fai pour le moment : tou d'abord l pb de lecture valeur text [ par clem0338 ] rebonjour, j'ai dans ma page : "ECHO "\n"; ECHO "\n"; ECHO "\n"; ECHO $HTTP_POST_VARS['txt'];"Mais malheuresement, ca lecture d'un fichier text [ par sghayra ] salut j un fishier text contenant le resultat de la commande mytraceroute j veux faire un script php qui permet de lire c fichier et mettre dans une boutons confirmmation [ par gezaak ] salut j'ai développer un bout de code (php) qui permet le vérification d'un nom dans une base de donne, si le nom existe il affiche un message "nom ex Variable non affichée dans echo (source base de données) [ par diatodan ] Bonjour, Voici mon problème : Lorsque je fait un echo à partir d'une base de données les variables ne sont pas remplacées et s'affichent comme ça :'. Une erreur mysql_fetch_assoc() [ par squallio ] Bonjour à tous est à toutes. Je vous expose mon probléme avec ce script : [code=php] <?php if (!isset($_SESSION)) { session_start(); } $MM_authoriz Problème d'affichage des liens [ par ren999 ] Bonjour a tous voila j'ai créé un site qui génère des pages depuis la base de donné il fonctionne comme un forum seulement je suis le seul a pouvoir aidez moi a corriger cette classe php [ par mannnourou7i ] <?php class membre { public $id ; public $nom ; public $prenom; public $adress; public $email; public checkbox en php [ par nejla25kachroudi ] Bonjour,j'ai un problème au niveau de checkbox,j'ai un formulaire sous forme d'un tableau de coordonnées des étudiants (les coordonnées sont enregistr Utiliser la valeur du champ text dans une requête [ par nostalgieing ] Salut à tous, J'aimerai savoir s'il vous plaît comment pourrai je utiliser la valeur d'un champ text dans une requête sans ni post ni get Je m'expliq


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,246 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales