Comment obtenir
src de CDATA RSS?
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?
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:
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 ..