Mettre tous les tags img d'un attribut xml dans une array [Résolu]

Messages postés
34
Date d'inscription
samedi 31 juillet 2010
Statut
Membre
Dernière intervention
26 mars 2013
- - Dernière réponse : cs_jimmyhendrix
Messages postés
34
Date d'inscription
samedi 31 juillet 2010
Statut
Membre
Dernière intervention
26 mars 2013
- 16 avril 2011 à 04:10
Salut !

J'ai un problème. J'ai un fichier xml qui contient les articles de mon blog. Donc, j'ai un peu de code html dans un attribut appellé texte qui contient le contenu du post. J'ai de temps en temps quelques img tags. Voilà le problème.

Je cherche un moyen de récupérer tous les src de mes img tags de mon fichier xml et les introduire dans une array (ou une boucle)(ou les deux). En fait, j'aimerais toutes les mettre dans une variable que je peux introduire dans le code html de ma page du genre <?php echo $tous_mes_images; ?> (Pour être plus précis : dans le head de ma page, je veux créer plusieurs <link rel="image_src" href="SRC-DE-MON-IMAGE" />)

<?php
//Je récupère mon texte dans mon fichier xml
$xdoc = new DomDocument;
$xdoc->Load('postblog.xml');
$xname = $xdoc->getElementsByTagName('post');
$select = $xname->item(0);
$texte = $select->getAttributeNode('texte')->value;

//mais la suite, je me le figure très mal...

//et j'ai trouvé ce code, mais je n'arrive
//pas à le modifier comme je vous l'explique plus haut :

// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');


///// Je ne veux pas qu'il aille prendre le tout dans un fichier html


// Find all images 
foreach($html->find('img') as $element) 
       echo $element->src . '
';

// Find all links 
foreach($html->find('a') as $element) 
       echo $element->href . '
';

?>



Est-ce que quelqu'un a une piste ? Je suis vraiment bloqué. J'espère avoir été clair, c'est dure à expliquer. Merci.
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
17
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
7 novembre 2011
3
Merci
preg_match_all('/<img.+?src(?: )*=(?: )*[\'"](.*?)[\'"]/si', $txt, $arrResult);

foreach($arrResult[1] as $lnk)
{
echo $lnk.'
';
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de salttaste
Messages postés
34
Date d'inscription
samedi 31 juillet 2010
Statut
Membre
Dernière intervention
26 mars 2013
0
Merci
C'est frustrant, j'y suis presque !

J'ai trouvé une fonction qui le fait, mais ça ne fonctionne pas pour tous les img tags, seulement le premier :

<?php

$html = ' et un deuxieme ';

if (preg_match('/
Commenter la réponse de cs_jimmyhendrix
Messages postés
17
Date d'inscription
samedi 6 mai 2006
Statut
Membre
Dernière intervention
7 novembre 2011
0
Merci
il y a preg_match_all() qui te retourne une array avec toute les img tags
Commenter la réponse de salttaste
Messages postés
34
Date d'inscription
samedi 31 juillet 2010
Statut
Membre
Dernière intervention
26 mars 2013
0
Merci
Ouais

en effet, j'ai essayé preg_match_all(), mais j'arrive pas à cerné chacun des src indépendamment. Je vais te donner mon code, ça va être plus clair :

<?php
$xdoc = new DomDocument;
$xdoc->Load('postblog.xml');
$xname = $xdoc->getElementsByTagName('post');
$select = $xname->item(0);

$texte = $select->getAttributeNode('texte')->value;
htmlspecialchars_decode($description, ENT_NOQUOTES);

if (preg_match('/';
} else {
    $thb2 = '';
}
?>


Donc, le code fonctionne très bien, mais j'obtiens seulement un thumbnail ; j'aimerais en avoir <link rel... pour chacune des images tags qui se trouverait dans mon attribut texte (xml).

Est-ce que t'as une idée comment faire ?
Commenter la réponse de cs_jimmyhendrix
Messages postés
34
Date d'inscription
samedi 31 juillet 2010
Statut
Membre
Dernière intervention
26 mars 2013
0
Merci
Hourra !

Ça fonctionne à merveille ! Je n'ai eu qu'à rajouter foreach($arrResult[1] as $lnk)
{
echo '<link rel="image_src" href="'.$lnk.'" />';
}

et j'ai exactement ce que je cherchais ! Merci encore !
Commenter la réponse de cs_jimmyhendrix