Вопрос

Я получаю данные из 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 - например, Смотрите ответы на эти вопросы:

  1. Как проанализировать и обрабатывать HTML с помощью PHP?
  2. Крепкий, зрелый 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 означает, что данные должны рассматриваться как обычная строка без разбора, поэтому вы должны думать, что это как строка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top