Regex et ATOM

Regex et ATOM - PHP - Programmation

Marsh Posté le 19-04-2005 à 17:50:29    

Bonjour les gens . j'ai oune piti probleme
 
Je voulai faire un gestionnaire et afficheur de flux et donc je dois gérer tous les types de flux RSS mais la n'est pas le probleme. Lorsque le flux est de type ATOM, je dois catcher les <link ... > qui sont que de type text/html donc type="text/html"
 
voici a quoi ressemble une balise link

Citation :

<link href="http://www.blogger.com/atom/6356614/108567929825946436" rel="service.edit" title="How to make a linkblog in Atom" type="application/atom+xml"/>
<link href="http://diveintomark.org/archives/2004/05/27/howto-atom-linkblog" rel="related" title="How to make a linkblog in Atom" type="text/html"/>


 
 
Le premier n'est pas a catché car il n'a pas le bon type, donc on doit prendre le 2eme . Mais le type="text/html" peut etre soit avant, soit apres le href et donc la se pose le probleme car je voudrais que s'il n'y est pas avant, il doit absolument y etre apres. J'ai donc regardé les sous-masques conditionnels et j'ai fait cette expression:
 

Citation :

'/<link(.*)(type="text\/html" )(.*) href="([^"]+)"(?(2)(.*)|(type="text\/html" ))(\/?)>/i'


 
 
qui tourne avec un preg_match :
 

Citation :

preg_match('/<link(.*)(type="text\/html" )(.*) href="([^"]+)"(?(2)(.*)|(type="text\/html" ))(\/?)>/i',$this->items[$i+1],$lien_atom);


 
 
Avec ceci:

Citation :

<link href="http://www.blogger.com/atom/6356614/108567929825946436" rel="service.edit" title="How to make a linkblog in Atom" type="application/atom+xml"/>
<link href="http://diveintomark.org/archives/2004/05/27/howto-atom-linkblog" rel="related" title="How to make a linkblog in Atom" type="text/html"/>


 
 
Le tableau $lien_atom est vide.
 
Par contre , avec ceci :
 

Citation :

<link rel="alternate" type="text/html" href="http://eurosport.tf1.fr/home/pages/v4/l3/s18/sport_lng3_spo18_sto709471.shtml">


 
le tableau ressemble a ca :
 

Citation :

Array
(
    [0] => <link rel="alternate" type="text/html" href="http://eurosport.tf1.fr/home/pages/v4/l3/s18/sport_lng3_spo18_sto709471.shtml">
    [1] =>  rel="alternate"
    [2] => type="text/html"
    [3] =>
    [4] => http://eurosport.tf1.fr/home/pages [...] 9471.shtml
    [5] =>
    [6] =>
    [7] =>
)


 
 
et donc tout fonctionne parfaitement.
 
J'espere avoir été clair
 
En gros, je voudrais que le premier exemple catch la ligne de link ou le type est text/html, comme dans le 2eme exemple meme si ce dernier ne comporte qu'une balise link
 
merci d'avance si vous avez eu la volonté d'arriver jusque la

Reply

Marsh Posté le 19-04-2005 à 17:50:29   

Reply

Marsh Posté le 19-04-2005 à 18:32:09    

Dsl de ne pas te répondre directement, mais es-tu sur qu'utiliser une regex et la bonne méthode ? Moi je travaillerai plutôt avec DOM, puisqu'il s'agit d'un doc XML.

Reply

Marsh Posté le 19-04-2005 à 18:41:09    

Sinon ce que tu cherches à faire, c'est pas tout simplement :
preg_match('/<link.*(type="text\/html" ).*\/>/i', $text, $result);
 
?

Reply

Marsh Posté le 20-04-2005 à 00:01:26    

non car je dois catch aussi le href

Reply

Marsh Posté le 20-04-2005 à 01:27:48    

ben fait le en deux fois. [:spamafote]

Reply

Marsh Posté le 20-04-2005 à 10:07:31    

oki c'est ce que je voulais faire si c'était impossible en une fois
 
merci quand meme :)

Reply

Sujets relatifs:

Leave a Replay

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