2010-07-05 67 views
3

當我嘗試使用simplexml_load_string作爲XML加載HTML文件時,我收到很多有關HTML的錯誤和警告,但它失敗了,它有一種方法可以使用SimpleXML正確加載html文件?PHP SimpleXML:如何加載HTML文件?

此HTML文件可能有不需要的空格,也可能是我希望SimpleXML忽略的其他一些錯誤。

+1

'使用simplexml解析html頁面是錯誤的,儘管 – silent 2010-07-05 09:21:29

+0

@silent:xhtml怎麼辦?這不應該是有效的XML? – beldaz 2011-02-02 02:01:57

回答

2

我會建議使用PHP Simple HTML DOM。我自己用它來處理從抓取頁面到操縱HTML模板文件的任何內容,它非常簡單,功能非常強大,應該適合您的需求。

這裏是他們的文件,展示了這種事情的幾個例子,你可以這樣做:

// Create DOM from URL or file 
$html = file_get_html('http://www.google.com/'); 

// Find all images 
foreach($html->find('img') as $element) 
     echo $element->src . '<br>'; 

// Find all links 
foreach($html->find('a') as $element) 
     echo $element->href . '<br>'; 
+0

我在Simple DOM中遇到了問題,因爲它在內部使用PHP DOM擴展,並且不會加載完整的HTML頁面。 – Quamis 2010-07-05 11:16:08

+1

可以總是先用PHP Tidy清理內容http://php.net/manual/en/book.tidy.php – robjmills 2010-07-05 11:40:52

+0

@Quamis:這是錯誤的,簡單DOM不*基於PHP DOM擴展。 – hakre 2013-06-22 08:39:15

0

檢查this手冊頁,這些選項之一(例如LIBXML_NOERROR)可能會幫助你......但請記住,html不一定是有效的xml,因此將它解析爲xml可能無效。

19

使用DomDocument::loadHtmlFilesimplexml_import_dom一起非簡潔(wellformed)HTML頁面加載到SimpleXML的。

+5

這應該是被接受的答案。 – hakre 2013-06-22 08:37:06

0

下面是一些加載外部html頁面的快速代碼,然後用簡單的xml解析它。

//suppresses errors generated by poorly-formed xml 
    libxml_use_internal_errors(true); 

    //create the html object 
    $html = new DOMDocument(); 

    //load the external html file 
    $html->loadHtmlFile('http://blahwhatever.com/'); 

    //import the HTML object into simple xml 
    $shtml = simplexml_import_dom($html); 

    //print the result 
    echo "<pre>"; 
    print_r($shtml); 
    echo "</pre>";