2011-08-27 40 views
0

我有這樣的代碼PHP修復GET格

function innerHTML($element) 
{ 
    $innerHTML = ''; 
    $children = $element -> childNodes; 
    foreach ((array)$children as $child) 
    { 
     $tmp_dom = new DOMDocument(); 
     $tmp_dom -> appendChild($tmp_dom -> importNode($child, true)); 
     $innerHTML .= trim($tmp_dom -> saveHTML()); 
    } 

    return $innerHTML; 
} 

function DOMGet($html, $class, $num = 0, $type = "class") 
{ 
    $dom = new DOMDocument('1.0', 'utf-8'); 
    @$dom -> loadHTML($html); 
    $xpath = new DOMXPath($dom); 
    $q = '//div[@'.$type.'="'.$class.'"]'; 

    if(is_numeric($num)) 
    { 
     $arr = $xpath -> query($q); 
     $arr = $arr -> item($num); 

     return innerHTML($arr); 
    } 
    else if(strtoupper($num) == "ALL") 
    { 
     $arr = $xpath -> query($q); 
     $abs = array(); 

     foreach($arr as $el) $abs[] = innerHTML($el); 
     return $abs; 

    } 

    return false; 
} 

不過,這並不當我嘗試調用標籤在所有的工作,有時(例如類=「測試」)不什麼都顯示!有人可以修復代碼?

+0

請提供的情況下,這並不工作,到底發生了什麼一個完整的例子。 –

+1

Pekka的權利..沒有一個完整的例子,有點太難以分辨什麼是壞的。但是,錯誤抑制運算符('@ $ dom =')在我眼中是一個潛在的問題。 –

+0

請不要在Stack Overflow上重複提問。謝謝。 – Kev

回答

0

您不能將DOMNodeList轉換爲數組,它顯然返回一個空數組。

0

這是你的m_INNER方法,它與你搞混了。你可以將它剝離到我的例子中,它會很好地工作。

function m_INNER($element) 
{ 
    $innerHTML = ''; 
    $children = $element->childNodes; 
    foreach ($children as $child) 
    { 
     $innerHTML .= $child->ownerDocument->saveXML($child); 
    } 

    return $innerHTML; 
} 

function DOMGet($html, $class, $num = 0, $type = "class") 
{ 

    $dom = new DOMDocument('1.0', 'utf-8'); 
    @$dom -> loadHTML($html); // You don't need the @ declaration here. 
    $xpath = new DOMXPath($dom); 
    $q = '//div[@'.$type.'="'.$class.'"]'; 

    if(is_numeric($num)) 
    { 
     $arr = $xpath -> query($q); 
     $arr = $arr -> item($num); 

     return m_INNER($arr); 
    } 

    else if(strtoupper($num) == "ALL") 
    { 
     $arr = $xpath -> query($q); 
     $abs = array(); 

     foreach($arr as $el) $abs[] = m_INNER($el); 
     return $abs; 

    } 

    return false; 
} 


$html = '<html><body><div class="apa">Test</div></body></html>'; 

print_r(DOMGet($html, "apa")); 

工作

乾杯

+0

謝謝你,它的工作:) – AimOn

+0

很高興聽到,玩得開心:) –