php - simplexml_load_file - simplexmlelement object
PHP XML Parsing (5)
¿Cuál es la mejor manera de analizar un archivo XML en PHP?
primero
Usando 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
Usando el 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 conozco. Si hay más relleno adentro
Quería saber qué método es el mejor para analizar archivos XML de gran tamaño, también qué método es el más rápido, independientemente de la forma en que el método deba implementarse.
El tamaño variará de 500KB a 2MB. El analizador debe ser capaz de analizar archivos grandes y pequeños en el menor tiempo posible con un buen uso de la memoria si es posible.
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 ). Personalmente, aunque nunca he usado XMLReader, generalmente he decidido qué usar dependiendo de si necesito o no editarlo:
- simplexml si solo estoy leyendo un documento
- DOM si estoy modificando el DOM y guardándolo de nuevo
También puede convertir objetos entre simplexml y DOM.
Prefiero simplexml_load_string para facilitar su uso. La velocidad de procesamiento puede depender del formato del archivo XML si los dos usan diferentes métodos para analizar el archivo: pruébelo en sus propios archivos y vea cuál es mejor para usted.
Todo XML es manejado por simpleXML en PHP ahora cuando desarrollo. Se extiende fácilmente y los métodos se sobrescriben cuando es necesario.
Empecé 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
}
}
Usando XML Reader podemos encontrar si la etiqueta actual es una etiqueta de apertura o una etiqueta de cierre y hacer lo necesario según sea necesario.
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.