2012-05-12 11 views
3

PHPでXML文書を解析する際に、cURLを使用してロードされたこの奇妙な問題があります。 URLアドレスを含むnodeValueを取得できません(私はCMSに簡単なRSSリーダーを実装しようとしています)。奇妙なことは、URLアドレスと日付(と)を含むノードを除くすべてのノードで機能することです。PHP DOMでcURLを使用してXMLを解析 - URLアドレスまたは日付の場合nodeValueを取得できません

ここにコードがあります(私はそれが愚かな解決法であることを知っていますが、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/>'; 
} 
} 

お願いします。

+0

読み込みしようとしているXMLファイルのURLを教えてください。 –

答えて

2

loadHTMLではなく、loadXMLを使用してください。あなたのリンクが表示されない理由の1つは、HTML内の<link>タグがその内容を無視するためです。ここでもご覧ください: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); 
+0

助けてくれてありがとう、今はうまくいきます。私はちょうどそれを逃した - 私はHTML文書を解析するためのスクリプトを書いた後、XMLのためにそれを使用しようとした...愚かな間違い:) – johny7cz

関連する問題