Как получить
src от cdata в RSS?
Вопрос
Я получаю данные из RSS -канала с сороком.
$rss[description]
Содержит CDATA с 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
Как я могу получить "img_url
"От этого? preg_match()
единственный способ? Может, я могу использовать Simplexml?
Решение
CDATA
У вас есть строка, содержащая HTML. Поэтому сначала рассматривайте его как текст, но, поскольку этот текст предназначен для содержания HTML, разрабатывайте этот текст, используя решение, подходящее для анализа HTML.
Другими словами: Используйте соответствующий инструмент (HTML -анализатор) для задания (анализ HTML).
Есть уже Существующие решения для анализа HTML в PHP - например, Смотрите ответы на эти вопросы:
Таким образом, в основном вы уже можете получить строку HTML от вашего XML. Теперь разрабатывайте HTML и получите источник изображения, используя некоторые из упомянутых выше решений.
С использованием preg_match()
Для анализа HTML - не очень хорошая идея, поскольку это должно быть очень сложным, чтобы сделать простую вещь, подходящую для HTML -анализатора.
Другие советы
Вам лучше не использовать регулярные выражения, где вы можете использовать надлежащие инструменты. Что -то, что приходит мне в голову (хотя, возможно, это можно сделать проще):
$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
.
Да, вы должны использовать Regex, CDATA означает, что данные должны рассматриваться как обычная строка без разбора, поэтому вы должны думать, что это как строка.