Question

Je suis la récupération de son flux RSS avec Magpie.
$rss[description] contient CDATA avec des éléments de HTML:

<![CDATA[  
<div>  
 <a href='url'>  
  <img src='img_url' alt='aaa' title='bbb' border='0' width='116' height='116'>  
 </a>  
</div>]]>  
Some other text  

Comment puis-je chercher « img_url » de tout cela? Est-ce preg_match() la seule façon? Peut-être que je peux utiliser simpleXML?

Était-ce utile?

La solution

CDATA que vous avez est une chaîne contenant HTML. Alors d'abord le traiter comme texte, mais étant donné que ce texte est destiné à contenir du code HTML, analyser ce texte à l'aide appropriée de solution pour l'analyse syntaxique HTML.

En d'autres termes:. utiliser l'outil approprié (analyseur syntaxique HTML) pour le travail (analyse syntaxique HTML)

Il existe déjà les solutions existantes pour l'analyse syntaxique HTML dans PHP - par exemple. voir les réponses à cette question:

  1. Comment analyser et de traiter HTML avec PHP?
  2. robuste, Mature HTML Parser pour PHP .

Alors, au fond, vous êtes déjà en mesure d'obtenir la chaîne HTML à partir de votre XML. Maintenant, analyser le code HTML et obtenir la source de l'image en utilisant quelques-unes des solutions mentionnées ci-dessus.

Utilisation preg_match() pour l'analyse syntaxique HTML n'est pas une bonne idée , car il devrait être très complexe pour faire un simple analyseur HTML chose convient.

Autres conseils

Vous préférable de ne pas utiliser des expressions régulières où vous pouvez utiliser des outils appropriés. Quelque chose qui vient à l'esprit (bien que peut-être il peut être fait plus facile):

$descr = $rss[description]; // String. You have extracted description part from your feed

$dom = new DOMDocument();
$dom->loadHTML($descr); // or you can use loadXML
if (!$dom) {
    die('Error loading HTML string.');
}

$xml = simplexml_import_dom($dom);
$imgSrc = (string)$xml->body->div->a->img['src'];

On y va. Sur la base de votre exemple CDATA $imgSrc sera égal à img_url.

oui, vous devez utiliser regex, des moyens CDATA que les données doivent être traiter comme une chaîne normale sans analyse syntaxique, de sorte que vous devriez penser comme une chaîne ..

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top