Pregunta

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

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
}

Segundo
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.

Se busca saber qué método es el mejor para analizar enormes archivos XML, también cuál es el método rápido con independencia de la forma en que el método debe ser implementado

Tamaño será que varía de 500 KB a 2 MB. El analizador debe ser capaz de analizar pequeños, así como archivos de gran tamaño en la menor cantidad de tiempo con un buen uso de la memoria, si es posible.

¿Fue útil?

Solución 2

He empezado a utilizar XMLReader para analizar los archivos XML. Después de hacer un poco de google en torno encontró que la mejor manera de analizar los archivos XML, ya que no se carga todo el archivo XML en la memoria. Decir si supongamos mis archivos XML era de 5 MB, mientras se analiza usando XMLReader 5 MB de 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
}
}

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

Otros consejos

Depende del documento que está pasando, pero XMLReader suele ser el más rápido que tanto simplexml y 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 modificar el DOM y el ahorro de nuevo

También puede convertir objetos entre simplexml y DOM.

Si está procesando enorme archivos no analizar ellos. Aplicar XSLT lugar. Eso le ahorrará enormes cantidades de memoria y tiempo de procesamiento.

Yo prefiero simplexml_load_string para facilitar su uso. La velocidad de procesamiento también puede depender del formato del archivo XML si los dos utilizan diferentes métodos para analizar el archivo - probarlo en sus propios archivos y ver lo que es mejor para usted

.

Todo XML es manejado por simplexml en PHP ahora cuando desarrollo. Se puede ampliar fácilmente y métodos sobrescribe cuando sea necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top