2009-02-04 13 views
6

Qual è il modo migliore per analizzare un file XML in PHP?PHP XML Parsing

Prima
Utilizzando l'oggetto DOM

//code 
$dom = new DOMDocument(); 
$dom->load("xml.xml"); 

$root = $dom->getElementsByTagName("tag"); 
foreach($root as $tag) 
{ 
$subChild = $root->getElementsByTagName("child"); 

// extract values and loop again if needed 
} 

Seconda
Utilizzando il metodo simplexml_load

// code 
$xml = simplexml_load_string("xml.xml"); 
$root = $xml->root; 
foreach($root as $tag) 
{ 
$subChild = $tag->child; 
// extract values and loop again if needed 
} 

Nota: Questi sono i due sono consapevole. Se ci sono più compilare.

volevo sapere quale sia il metodo migliore per analizzare enormi file XML, anche quale sia il metodo più veloce a prescindere dal modo in cui il metodo deve essere attuata

Size sarà varia da 500KB a 2MB. Il parser dovrebbe essere in grado di analizzare file piccoli e grandi nel minor tempo possibile con un buon utilizzo della memoria, se possibile.

+0

Quanto siamo grandi quando diciamo "enorme"? Megabyte vale la pena? –

risposta

4

Ho iniziato a utilizzare XMLReader per analizzare i file XML. Dopo aver fatto un po 'di googling, ho trovato il modo migliore per analizzare i file XML in quanto non carica l'intero file XML in memoria. Supponiamo che supponiamo che i miei file XML siano di 5 MB, mentre l'analisi con XMLReader 5MB della mia memoria non viene sprecata.

//usage 
$xml = new XMLReader(); 
$xml->XML($xmlString); 
while($xml->read) 
{ 
if($xml->localName == 'Something') // check if tag name equals something 
{ 
//do something 
} 
} 

Utilizzando lettore di XML possiamo trovare se il tag corrente è un tag di apertura o tag di chiusura e fare il necessario, come richiesto.

1

Preferisco simplexml_load_string per facilità d'uso. La velocità di elaborazione può dipendere dal formato del file XML se i due utilizzano metodi diversi per analizzare il file: provalo sui tuoi file e vedi quale è meglio per te.

4

Dipende dal documento che si sta passando, ma XMLReader è solitamente il più veloce sia di simplexml che di DOM (http://blog.liip.ch/archive/2004/05/10/processing_large_xml_documents_with_php.html). Personalmente, però non ho mai usato XMLReader e di solito deciso quale usare a seconda se o non ho bisogno di modificarla:

  • SimpleXML se sto solo leggendo un documento
  • DOM se sto modificando il DOM e salvataggio indietro

È anche possibile convertire oggetti tra simplexml e DOM.

1

Tutto il codice XML viene gestito da simpleXML in PHP ora quando sviluppo. È facilmente estensibile e i metodi sovrascritti quando necessario.

+0

simpleXML non è veramente adatto per l'estensione. Non è possibile sovrascrivere il costruttore e non è possibile aggiungere proprietà alla classe figlio perché vengono presi come nuovi nodi. È preferibile utilizzare la composizione piuttosto che l'ereditarietà, perché "ha un" XML semplice anziché "è un" semplice XML – meouw

2

Se si stanno processando i file enormi, il file non li analizza. Applicare invece XSLT. Ciò ti farà risparmiare enormi quantità di memoria e tempo di elaborazione.