2012-01-12 2 views
1

Я получаю данные из RSS-ленты с Magpie.
$rss[description] содержит CDATA с HTML элементами:Как получить <img> src с CDATA в RSS?

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

Как я могу принести "img_url" от этого? Есть preg_match() единственный способ? Может быть, я могу использовать simpleXML?

ответ

0

CDATA у вас есть строка, содержащая HTML. Поэтому сначала рассматривайте его как текст, но поскольку этот текст предназначен для размещения HTML, проанализируйте этот текст, используя решение, подходящее для синтаксического анализа HTML.

Другими словами: использовать соответствующий инструмент (парсер HTML) для задания (разбор HTML).

Есть уже существующие решения для разбора HTML в PHP - напр. см ответы на эти вопросы:

  1. How to parse and process HTML with PHP?
  2. Robust, Mature HTML Parser for PHP.

Таким образом, вы уже можете получить строку HTML из своего XML. Теперь проанализируйте HTML и получите источник изображения, используя некоторые из упомянутых выше решений.

Использование preg_match() для разбора HTML не является хорошей идеей, как это нужно будет очень сложно сделать простую вещь HTML анализатор подходит для.

-1

да, то вы должны использовать регулярное выражение, CDATA означает, что данные должны быть трактовать как обычную строку без разбора, так что вы должны думать, как строка ..

+0

-1 Нет, вам не следует использовать регулярное выражение, есть ** много ** более эффективных решений для синтаксического анализа HTML, чем регулярных выражений. – Tadeck

+0

так, что это? – lvil

+1

@lvil: вы можете увидеть ответы на этот вопрос: [Надежный, зрелый HTML-парсер для PHP] (http://stackoverflow.com/questions/292926/robust-mature-html-parser-for-php). Просто рассматривайте это как обычную строку, но строку, содержащую HTML. Так что вам нужно не регулярное выражение, оно должно быть действительно сложным, чтобы соответствовать всем случаям. Вам нужен HTML-парсер, как в вопросе, который я связал. – Tadeck

0

Лучше не использовать регулярные выражения, где вы можете использовать правильные инструменты. Что-то, что приходит мне на ум (хотя, возможно, это можно сделать проще):

$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']; 

Здесь мы идем. На основе вашего примера CDATA $imgSrc будет равен img_url.

Смежные вопросы