2012-05-10 30 views
-1

私はウェブサイトのコンテンツを読むことを試みていますが、私は画像を取得したい、問題を抱えています。これらの要素をリンクしますが、要素を取得したいのですが、要素コンテンツではありません。素子。PHP DOMDocument要素の取得方法は?

は、どのように私はこれを行うことができます。..

<?php 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, "http://www.link.com"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    $output = curl_exec($ch); 

    $dom = new DOMDocument; 
    @$dom->loadHTML($output); 

    $items = $dom->getElementsByTagName('a'); 

    for($i = 0; $i < $items->length; $i++) { 
     echo $items->item($i)->nodeValue . "<br />"; 
    } 

    curl_close($ch);; 
?> 
+0

あなたの質問から逸脱することはありませんが、PHP Simple HTML DOM Parserを使用することをお勧めします。このようなコーディングはずっと簡単になります。 http://simplehtmldom.sourceforge.net/manual.htm – Norse

+0

私はそれについて知っているし、私の人生を楽にするだろうが、私はコードの一部が売却される可能性があると私はそれで図書館を出荷することはできません知っている。 –

+0

私は要素全体を取得する方法を知る必要があります –

答えて

0

私は

とにかく...あなただけのいくつかのサンプルコードをコピー&ペーストし、それが実際にどのように動作するかを学習しようと気にしませんでしたと仮定しています->nodeValue部分は要素を取り、テキストコンテンツを返します(要素には1つのテキストノードの子があるため、他に何かがあれば、nodeValueが与えるものはわかりません)。

->nodeValueを削除するだけで、あなたの要素があります。

+0

それは私がそれを印刷することはできません。その文字列ではないと言います –

+0

クラスDOMElementのオブジェクトを文字列に変換できませんでした。 –

+0

要素が必要です.DOMElementは要素です。それは文字列ではないので、私はあなたがそれが印刷するために何を期待しているのか分からない。あなたがあなたの言いたいことを推測する必要がないように、希望の出力例を使ってあなたの質問を編集してください。 –

1

DOMElementのシリアル番号付きのを求めているようですか?例えば。 <a href="http://example.org">link text</a>を含む文字列が必要ですか? (あなたの質問をより明確にしてください。)

$url = 'http://example.com'; 
$dom = new DOMDocument(); 
$dom->loadHTMLFile($url); 

$anchors = $dom->getElementsByTagName('a'); 

foreach ($anchors as $a) { 
    // Best solution, but only works with PHP >= 5.3.6 
    $htmlstring = $dom->saveHTML($a); 

    // Otherwise you need to serialize to XML and then fix the self-closing elements 
    $htmlstring = saveHTMLFragment($a); 
    echo $htmlstring, "\n"; 
} 


function saveHTMLFragment(DOMElement $e) { 
    $selfclosingelements = array('></area>', '></base>', '></basefont>', 
     '></br>', '></col>', '></frame>', '></hr>', '></img>', '></input>', 
     '></isindex>', '></link>', '></meta>', '></param>', '></source>', 
    ); 
    // This is not 100% reliable because it may output namespace declarations. 
    // But otherwise it is extra-paranoid to work down to at least PHP 5.1 
    $html = $e->ownerDocument->saveXML($e, LIBXML_NOEMPTYTAG); 
    // in case any empty elements are expanded, collapse them again: 
    $html = str_ireplace($selfclosingelements, '>', $html); 
    return $html; 
} 

しかし、それは潜在的にエンコーディングを混ぜる可能性があるため、何をやっていることは危険であることに注意してください。出力を別のDOMDocumentとして持ち、importNode()を使用して、必要なノードをコピーする方が良いでしょう。あるいは、XSLスタイルシートを使用します。

関連する問題