Небольшая помощь с этим xPath? - PullRequest
1 голос
/ 25 марта 2011

Я получаю некоторую информацию из RSS.

<?php
$dom = new DOMDocument;
libxml_use_internal_errors(TRUE);
$dom->load('http://www.myrss.com');
libxml_clear_errors();

$xPath = new DOMXPath($dom);
$links = $xPath->query('xxxxx');
foreach($links as $link) {
    printf("%s \n", $link->nodeValue);
}
?>

Мне удалось получить НАЗВАНИЕ, ССЫЛКУ и ОПИСАНИЕ с помощью //item/title и так далее, как бы я ни хотел получить текстовое содержимое и изображениеописания разделены.

Как я могу видеть через страницу источника, используя Firefox, это код, который я вижу для изображения и содержания.Оба находятся в <description></description>

ИЗОБРАЖЕНИЕ

<div class="separator" style="clear: both; text-align: center;"><a href="LINK TO IMAGE" imageanchor="1" 
style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="192" 
src="LINK TO IMAGE" width="320" /></a></div>

ТЕКСТ КОНТЕНТА

<span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"> CONTENT TEXT IS HERE </span>

Какой xPath следует использоватьполучить эти данные?Спасибо

Ответы [ 3 ]

0 голосов
/ 25 марта 2011

Похоже, что содержимое закодировано / экранировано, поэтому вы не можете запросить его с помощью Xpath, поскольку это не HTML / XML. Взять htmlentities и html_entity_decode

Вы должны извлечь содержимое, преобразовать его в HTML / XML и загрузить его в документ DOM отдельно. Затем вы можете запросить его, используя Xpath.

0 голосов
/ 25 марта 2011

Если это то, на что это похоже, и контент закодирован в HTML, вы не можете сделать это за один шаг.Вы должны извлечь каждый текст описания и проанализировать его собственный DOM (если только вы не захотите прибегнуть к регулярному выражению, которое я настоятельно не рекомендую) .

Если вы сомневаетесь, вы можете пройти через Tidy раньше.DOMDocument имеет loadHTML(), что довольно устойчиво, но не гарантируется, что он может загрузить любой HTML.

// beware, this is untested. it should give you an idea, though.

$dom = new DOMDocument;
libxml_use_internal_errors(TRUE);

$dom->load('http://www.myrss.com');
libxml_clear_errors();

$xPath = new DOMXPath($dom);
$items = $xPath->query('/rss/channel/item');

foreach($items as $item) {
    $descr = $xPath->query('./description', $item);
    // there should be at most one, but foreach gracefully
    // handles the case where there is no <description>
    foreach ($descr as $d) {
        $temp_dom = new DOMDocument();
        $temp_dom->loadHTML( $d->nodeValue );   // error handling/Tidy here!

        $temp_xpath = new DOMXPath($temp_dom);

        $img = $temp_xpath->query('//img');
        $txt = $temp_xpath->query('//span[@class="Apple-style-span"]');

        // now do something with $img and $txt
    }

}
0 голосов
/ 25 марта 2011

Ваш код не отформатирован правильно, поэтому другим будет сложно поработать с ним.

Однако интерактивный инструмент здесь: http://www.bubasoft.net/ (XPath Builder) очень полезен при построенииXPath-запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...