2011-07-09 12 views
14

Vorrei prelevare i dati da una tabella senza utilizzare le espressioni regolari. Mi è piaciuto usare simplexml per analizzare i feed RSS e vorrei sapere se può essere usato per prendere una tabella da un'altra pagina.È possibile utilizzare simplexml per copiare tramite html?

Es. Prendi la pagina con curl o semplicemente file_get_contents(); quindi utilizzare simplexml per afferrare il contenuto?

risposta

27

È possibile utilizzare la funzione loadHTML dal modulo DOM, e quindi importare che DOM in SimpleXML via simplexml_import_dom:

$html = file_get_contents('http://example.com/'); 
$doc = new DOMDocument(); 
$doc->loadHTML($html); 
$sxml = simplexml_import_dom($doc); 
+1

Big +1. Aggiunto un link a 'simplexml_import_dom' e un piccolo frammento di ulteriore spiegazione. –

+0

Trucco molto bello. Sfortunatamente sembra che il modulo DOM non sia installato sul server su cui sto lavorando. È in genere standard>? – chris

+0

@chris DOM e la sua dipendenza, libxml, sono entrambi compilati per impostazione predefinita. Possono essere esplicitamente trascurati nella compilazione o disabilitati in fase di esecuzione, ma ciò è molto insolito. – phihag

7

Se questo è XHTML - sì, è sicuramente possibile. Il vero XHTML è solo XML alla fine, quindi può essere analizzato con un parser XML.

SimpleXML, tuttavia, accetta solo XML rigoroso. Se non è possibile ottenere XHTML valido sembra metterlo attraverso il meno rigorosa DOMDocument biblioteca prima farà il trucco (source here):

<?php 
    $html = file_get_contents('http://...'); 
    $doc = new DOMDocument(); 
    $doc->strictErrorChecking = FALSE; 
    $doc->loadHTML($html); 
    $xml = simplexml_import_dom($doc); 
?> 
0

può dipendere da una pagina. Se la pagina è in XHTML (la maggior parte delle pagine web al giorno d'oggi), allora qualsiasi parser XML dovrebbe fare, altrimenti cerca il parser SGML. Ecco una domanda simile, potreste essere interessati a: Error Tolerant HTML/XML/SGML parsing in PHP

+1

MOST pagine web? Fonte per quei dati pls? Inoltre, si prega di scavare intorno SO (o internet in generale) per scoprire perché le persone di solito non servono XHTML correttamente. – Mchl

1

La mia versione - tolleranti agli errori e problemi con la codifica

libxml_use_internal_errors(true); 
$doc = new DOMDocument(); 
$doc->strictErrorChecking = FALSE; 
$doc->loadHTML(mb_convert_encoding($this->html_content, 'HTML-ENTITIES', 'UTF-8')); 
libxml_use_internal_errors(false); 
$xml = simplexml_import_dom($doc); 
Problemi correlati