2009-02-04 12 views
6

¿Cuál es la mejor manera de analizar un archivo XML en PHP?PHP XML Parsing

Primera
Utilizando el objeto 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 
} 

Segunda
Uso del método 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: Estos son los dos que sepa. Si hay más complete.

quería saber qué método es el mejor para analizar enormes archivos XML, también cuál es el método más rápido independientemente de la forma en que el método debe ser implementado

Tamaño será variando de 500KB a 2MB. El analizador debería poder analizar archivos pequeños y grandes en el menor tiempo posible con un buen uso de la memoria si es posible.

+0

¿Qué tan grande estamos hablando cuando decimos "enorme"? Megabytes vale la pena? –

Respuesta

4

He comenzado a usar XMLReader para analizar los archivos XML. Después de hacer un poco de búsqueda de Google, encontré lo mejor para analizar los archivos XML, ya que no carga todo el archivo XML en la memoria. Digamos si supongo que mis archivos XML eran de 5 MB, mientras que el análisis con XMLReader de 5 MB de mi memoria no se desperdicia.

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

utilizando un lector de XML podemos encontrar si la etiqueta actual es una etiqueta de apertura o de cierre del marcador y hacer lo necesario según se requiera.

1

Prefiero simplexml_load_string para facilitar su uso. La velocidad de procesamiento bien puede depender del formato del archivo XML si los dos utilizan diferentes métodos de análisis del archivo: pruébelo en sus propios archivos y vea cuál es mejor para usted.

4

Depende del documento que está pasando, pero XMLReader suele ser más rápido que tanto simplexml como DOM (http://blog.liip.ch/archive/2004/05/10/processing_large_xml_documents_with_php.html). Aunque personalmente nunca he utilizado XMLReader y por lo general decidí cuál utilizar en función de si o no tengo que editarlo:

  • simplexml si sólo estoy leyendo un documento
  • DOM si estoy modificando el DOM y guardándolo nuevamente

También puede convertir objetos entre simplexml y DOM.

1

Todo XML es manejado por simpleXML en PHP ahora cuando lo desarrollo. Se extiende fácilmente y los métodos se sobrescriben cuando es necesario.

+0

simpleXML no es realmente adecuado para extender. No puede anular el constructor y no puede agregar propiedades a la clase secundaria porque se toman como nuevos nodos. Es mejor usar composición en lugar de herencia, es decir, 'tiene un' simpleXML en vez de 'es un' simpleXML – meouw

2

Si está procesando archivos enormes no los analice. Aplicar XSLT en su lugar. Eso te ahorrará una gran cantidad de memoria y tiempo de procesamiento.