Parser le texte en entier

Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 - 10 mars 2007 à 20:29
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 - 13 mars 2007 à 02:24
Bonjour,


Voilà j'essaye de faire un parser.

Tout ce qui est création du fichier xml etc pour le moment ca devrait
aller, en fait je cherche plus précisément à détecter plusieurs fois le
même mot SI plusieurs fois il y'a.


Voici ce que j'utilise :

        Voici un bout de source :

        <?php

            $url_handle = fopen("
fparser.php
", "rb");

            $url_contents = '';

            while (!feof($url_handle))

                $url_contents .= fread($url_handle, 8192);

            fclose($url_handle);

            $url_contents=str_replace("\r\n",'',$url_contents);

            

            $motif_fr = '`<nom>(.+?)</nom>`';

            preg_match($motif_fr,$url_contents,$result_fr);

            $nom = str_replace(array('<nom>','</nom>'),array('',''),$result_fr[0]);

            echo '<li>'.$nom.'</li>';

        ?>



Et voici un bout de ma page "
fparser.php"
:


<nom>Systeme Unix</nom>

....

<nom>Anglais</nom>


Le problème étant que si j'utilise cette méthode je n'obtiens que le premier (Systeme Unix) pas le reste (Anglais).


J'aimerais savoir comment faire pour qu'il parse toute la page !


Merci d'avance


@+

13 réponses

DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
10 mars 2007 à 21:09
Salut,

il faut utiliser le flag 'm' (multilignes) dans les options:

$motif_fr = '`<nom>(.+?)</nom>`m';

NOTA: pour supprimer les caractères d'espacements, il existe la fonction trim().
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
10 mars 2007 à 21:13
Je viens de tester ce que tu m'as dis pour le flag multilignes et cela ne fonctionne pas, je n'ai malheureusement aucune différence.
Est-ce normal ou bien dois-je rajouter encore quelque chose ?

Merci quand même de ton aide :)

@+
0
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
10 mars 2007 à 21:22
réessayes mais sans cette ligne:

$url_contents=str_replace("\r\n",'',$url_contents);
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
10 mars 2007 à 21:28
Non toujours pas :

Voici ma source :

<html>
   
        Voici les noms :
        <?php
            $url_handle = fopen("./file.xml", "rb");
            $url_contents = '';
            while (!feof($url_handle))
                $url_contents .= fread($url_handle, 8192);
            fclose($url_handle);
           
            $motif_fr = '`<nom>(.+?)</nom>`m';
            preg_match($motif_fr,$url_contents,$result_fr);
            $nom = str_replace(array('<nom>','</nom>'),array('',''),$result_fr[0]);
            echo '<li>'.$nom.'</li>';
        ?>
   
</html>

et voici la page que je veux parser :

<?xml version="1.0" encoding= "ISO-8859-1"?>
<day><nom>TP pipes - B2 - Systeme Unix</nom> index.php?section=elearning <debut>13:00</debut><duree>03:00</duree><description>TP Pipes</description><lieu>SM 24-25 - Salle Machine</lieu><matiere>B2 - Systeme Unix</matiere><type>TP</type><nom>Class 2.6.2 (Intensive Listening, Speaking, Reading and Writing) - B2 - Anglais</nom>index.php?section =elearning<debut>16:00</debut><duree>01:30</duree><description>In this second class of the week we will continue reviewing for the Mid-Term Exam.

We will also do an assortment of exercises to help you improve your listening, speaking, reading and writing skills.

Please bring your pens, paper, English materials and your dictionaries!
</description><lieu>ip03 - Salle de cours</lieu><matiere>B2 - Anglais</matiere><type>Cours</type></day>

Voilà !

Et j'ai toujours que le premier donc je comprend vraiment pas ^_^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
10 mars 2007 à 21:43
Hello,

pourquoi n'utilises tu pas simpleXML, ou DOMDocument, par exemple...?
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
10 mars 2007 à 21:45
très simple j'ai pris comme extension xml, mais je souhaite le faire pour toute sorte de fichier, que ce soit des pages html ou encore du fichier texte, peu importe, s'il le faut je remplace le fichier xml par un .txt ^_^

Disons que si j'arrive à savoir le faire pour là je pourrais le faire sur le reste :)

@+
0
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
10 mars 2007 à 22:13
cette fois-ci, c'est la bonne !
<?php
$res= array();
$handle = fopen('file.xml', 'r');
if ($handle)
{
while (!feof($handle))
{
$buffer = trim( fgets($handle,1024) );
if (preg_match('`<nom>(.+?)</nom>`',$buffer,$matches))
{
echo '<li>'.$matches[1].'</li>';
}
}
}
fclose($handle);
?>
0
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
10 mars 2007 à 22:18
$res est à supprimer.
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
10 mars 2007 à 22:23
Salut,

J'ai cherché quelque chose comme ca mais je n'ai pas trouvé, merci beaucoup et je pense que tu n'ai pas loin u alors chez toi ca fonctionne mais pas chez moi

Voici la page ou tu peux constater par toi même :

http://architecte-warez.com/mytests/

Voici les deux fichier qui existent :
   - index.php
   - file.xml

Tu peux télécharger file.xml si tu veux c'est celui que je t'ai donné juste au dessus et je suis sur un serveur 1&1 (bien que je pense que cela n'y change strictement rien).

Voici ce qui se trouve EXACTEMENT dans le fichier index.php :

<html>
   
        Voici les noms :
        <?php
            $handle = fopen('file.xml', 'r');
            if ($handle)
            {
                while (!feof($handle))
                {
                    $buffer = trim( fgets($handle,1024) );
                    if (preg_match('`<nom>(.+?)</nom>`',$buffer,$matches))
                    {
                        echo '<li>'.$matches[1].'</li>';
                    }
                }
            }
            fclose($handle);
        ?>
   
</html>

Pourtant ce que tu as trouvé me semble correct, mais là je comprend plus rien du tout, en tout cas merci pour le mal que tu te donne, chapeau l'artiste ^_^

@+
0
DiGhan Messages postés 239 Date d'inscription samedi 21 février 2004 Statut Membre Dernière intervention 3 juin 2010 1
11 mars 2007 à 00:05
Oui chez moi (en local) tout fonctionne, j'ai bien les 2 valeurs contenues dans les balises <nom></nom>.

C'est vraiment bizarre st'histoire...
0
Also know as Messages postés 259 Date d'inscription samedi 13 décembre 2003 Statut Membre Dernière intervention 22 novembre 2010 2
11 mars 2007 à 08:39
J'ai testé <lieu>..</lieu> qui à donc aussi deux endroits dans le fichier feli.xml, et là ben pour je ne sais quelle raions cela fonctionne très bien, c'est uniquement sur le nom qu'il me jette un peu partout, c'est très bizarre...

Donc ton code source fonctionne, mais pour une raison inconnue il aime pas les "nom"

@+
0
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
11 mars 2007 à 12:38
Saell og blesuð

Heu et pourquoi ne pas utiliser preg_match_all() au lieu de preg_match() ?




Vilhjálms


Sigurðsdóttir aka Frëyjá
0
vilhjalms Messages postés 591 Date d'inscription mercredi 20 juillet 2005 Statut Membre Dernière intervention 16 juillet 2009 2
13 mars 2007 à 02:24
Saell og blesuð

En gros et en partant de votre fichier xml : http://architecte-warez.com/mytests/file.xml
cela donne un truc du genre :

<?php
$url_handle = fopen('file.xml', 'rb');
$url_contents = '';
while (!feof($url_handle))
    $url_contents .= fread($url_handle, 1024);
fclose($url_handle);
$url_contents=str_replace("\r\n",'',$url_contents);

$motif = '`<nom>(.+?)</nom>`';
preg_match_all($motif,$url_contents,$result);
$nb_result=count($result[0]);
for ($i=0;$i<=$nb_result-1;$i++){
    echo '<li>',str_replace(array('<nom>','</nom>'),'',$result[0][$i]),'</li>',"\r\n";
}
?>

Cependant pour du xml je reste du meme avis que Malalam a savoir l utilisation de SimpleXML mais bon.



Vilhjálms


Sigurðsdóttir aka Frëyjá
0
Rejoignez-nous