Domanda

Sto recuperando i dati dal feed RSS con Magpie.
$rss[description] Contiene cData con elementi 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  

Come posso prendere "img_url"Da questo? preg_match() l'unico modo? Forse posso usare simplexml?

È stato utile?

Soluzione

CDATA Hai una stringa contenente HTML. Quindi prima trattalo come testo, ma poiché questo testo ha lo scopo di contenere HTML, analizza questo testo usando la soluzione appropriata per l'analisi HTML.

In altre parole: Utilizzare lo strumento appropriato (parser HTML) per il lavoro (analizzazione HTML).

Ci sono già Soluzioni esistenti per l'analisi HTML in PHP - per esempio. Vedi le risposte a queste domande:

  1. Come analizzare ed elaborare HTML con PHP?
  2. Parser HTML robusto e maturo per PHP.

Quindi, in sostanza, sei già in grado di ottenere la stringa HTML dal tuo XML. Ora analizza l'HTML e ottieni la fonte dell'immagine usando alcune delle soluzioni sopra menzionate.

Usando preg_match() Per l'analisi HTML non è una buona idea, poiché dovrebbe essere molto complesso per fare una cosa semplice, il parser HTML è adatto.

Altri suggerimenti

È meglio non usare espressioni regolari in cui è possibile utilizzare strumenti adeguati. Qualcosa che mi viene in mente (anche se forse può essere fatto più 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'];

Eccoci qui. Basato sul tuo esempio CDATA $imgSrc sarà uguale a img_url.

Sì, dovresti usare Regex, CDATA significa che i dati dovrebbero essere trattati come stringa normale senza analisi, quindi dovresti pensarci come una stringa ..

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top