3

cURLを介してロードされたPHPでXMLドキュメントを解析するときにこの奇妙な問題が発生します。URLアドレスを含むnodeValueを取得できません(単純なRSSリーダーをCMSに実装しようとしています)。奇妙なことに、URLアドレスと日付(および)を含むものを除いて、すべてのノードで機能します。

これがコードです(私はそれがばかげた解決策であることを知っていますが、私はDOMの操作とXMLドキュメントの解析の初心者です)。

function file_get_contents_curl($url) {

$ch = curl_init();    // initialize curl handle
curl_setopt($ch, CURLOPT_URL, $url); // set url to post to
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 4); // times out after 4s
$result = curl_exec($ch); // run the whole process

return $result;
}

function vypis($adresa) {

$html = file_get_contents_curl($adresa);

$doc = new DOMDocument();
@$doc->loadHTML($html);

$nodes = $doc->getElementsByTagName('title');
$desc = $doc->getElementsByTagName('description');
$ctg = $doc->getElementsByTagName('category');
$pd = $doc->getElementsByTagName('pubDate');
$ab = $doc->getElementsByTagName('link');
$aut = $doc->getElementsByTagName('author');


for ($i = 1; $i < $desc->length; $i++) {

    $dsc = $desc->item($i);
    $titles = $nodes->item($i);
    $categorys = $ctg->item($i);
    $pubDates = $pd->item($i);
    $links = $ab->item($i);
    $autors = $aut->item($i);

    $description = $dsc->nodeValue;
    $title = $titles->nodeValue;
    $category = $categorys->nodeValue;
    $pubDate = $pubDates->nodeValue;
    $link = $links->nodeValue;
    $autor = $autors->nodeValue;

    echo 'Title:' . $title . '<br/>';
    echo 'Description:' . $description . '<br/>';
    echo 'Category:' . $category . '<br/>';
    echo 'Datum ' . gmdate("D, d M Y H:i:s",
       strtotime($pubDate)) . " GMT" . '<br/>';
    echo "Autor: $autor" . '<br/>';
    echo 'Link: ' . $link . '<br/><br/>';
}
}

これを手伝ってくれませんか。

4

1 に答える 1

2

RSSを読むには、を使用するべきではありませんloadHTMLが、loadXML。リンクが表示されない理由の1つは<link>、HTMLのタグがその内容を無視するためです。こちらもご覧ください:http ://www.w3.org/TR/html401/struct/links.html#h-12.3

<item>また、タグを繰り返し処理してから、子ノードを繰り返し処理する方が簡単だと思います。そのようです:

$d = new DOMDocument;
// don't show xml warnings
libxml_use_internal_errors(true);
$d->loadXML($xml_contents);
// clear xml warnings buffer
libxml_clear_errors();

$items = array();

// iterate all item tags
foreach ($d->getElementsByTagName('item') as $item) {
    $item_attributes = array();
    // iterate over children
    foreach ($item->childNodes as $child) {
        $item_attributes[$child->nodeName] = $child->nodeValue;
    }
    $items[] = $item_attributes;
}

var_dump($items);
于 2012-05-12T04:54:55.810 に答える