Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

    
            
  •              ¿Cómo analiza y procesa HTML / XML en PHP?                                      30 respuestas                          
  •     
    

He usado el Analizador XML anteriormente, y aunque funcionó bien, no estaba contento con él en general, me pareció que estaba usando soluciones para cosas que deberían ser una funcionalidad básica.

Recientemente vi SimpleXML pero aún no lo he probado. ¿Es más simple? ¿Qué ventajas y desventajas tienen ambos? ¿Algún otro analizador que haya usado?

¿Fue útil?

Solución

Tendría que decir SimpleXML toma el pastel porque es en primer lugar una extensión, escrito en C, y es muy rápido. Pero segundo, el documento analizado toma la forma de un objeto PHP. Entonces puede " consultar " como $ root- > myElement .

Otros consejos

Eche un vistazo a las extensiones XML disponibles de PHP y vea http://devzone.zend.com/243/ y http://devzone.zend.com/1035/ para una discusión de esos.

La principal diferencia entre XML Parser y SimpleXML es que este último no es un analizador de extracción. SimpleXML está construido sobre las extensiones DOM y cargará todo el archivo XML en la memoria. El analizador XML como XMLReader solo cargará el nodo actual en la memoria. Defina controladores para nodos específicos que se activarán cuando el analizador lo encuentre. Eso es más rápido y ahorra en memoria. Pagas por eso sin poder usar XPath.

Personalmente, encuentro SimpleXml bastante limitante (por lo tanto, simple) en lo que ofrece sobre DOM. Sin embargo, puede cambiar fácilmente entre DOM y SimpleXml, pero generalmente no me molesto y voy directamente a la ruta DOM. DOM es una implementación de la API DOM del W3C, por lo que puede estar familiarizado con ella desde otros idiomas, por ejemplo, JavaScript.

Esta es una función útil para el análisis rápido y fácil de XML cuando una extensión no está disponible:

<?php
/**
 * Convert XML to an Array
 *
 * @param string  $XML
 * @return array
 */
function XMLtoArray($XML)
{
    $xml_parser = xml_parser_create();
    xml_parse_into_struct($xml_parser, $XML, $vals);
    xml_parser_free($xml_parser);
    // wyznaczamy tablice z powtarzajacymi sie tagami na tym samym poziomie
    

Esta es una función útil para el análisis rápido y fácil de XML cuando una extensión no está disponible:

<*>tmp=''; foreach ($vals as $xml_elem) { $x_tag=$xml_elem['tag']; $x_level=$xml_elem['level']; $x_type=$xml_elem['type']; if ($x_level!=1 && $x_type == 'close') { if (isset($multi_key[$x_tag][$x_level])) $multi_key[$x_tag][$x_level]=1; else $multi_key[$x_tag][$x_level]=0; } if ($x_level!=1 && $x_type == 'complete') { if (

Esta es una función útil para el análisis rápido y fácil de XML cuando una extensión no está disponible:

<*>tmp==$x_tag) $multi_key[$x_tag][$x_level]=1;

Esta es una función útil para el análisis rápido y fácil de XML cuando una extensión no está disponible:

<*>tmp=$x_tag; } } // jedziemy po tablicy foreach ($vals as $xml_elem) { $x_tag=$xml_elem['tag']; $x_level=$xml_elem['level']; $x_type=$xml_elem['type']; if ($x_type == 'open') $level[$x_level] = $x_tag; $start_level = 1; $php_stmt = '$xml_array'; if ($x_type=='close' && $x_level!=1) $multi_key[$x_tag][$x_level]++; while ($start_level < $x_level) { $php_stmt .= '[$level['.$start_level.']]'; if (isset($multi_key[$level[$start_level]][$start_level]) && $multi_key[$level[$start_level]][$start_level]) $php_stmt .= '['.($multi_key[$level[$start_level]][$start_level]-1).']'; $start_level++; } $add=''; if (isset($multi_key[$x_tag][$x_level]) && $multi_key[$x_tag][$x_level] && ($x_type=='open' || $x_type=='complete')) { if (!isset($multi_key2[$x_tag][$x_level])) $multi_key2[$x_tag][$x_level]=0; else $multi_key2[$x_tag][$x_level]++; $add='['.$multi_key2[$x_tag][$x_level].']'; } if (isset($xml_elem['value']) && trim($xml_elem['value'])!='' && !array_key_exists('attributes', $xml_elem)) { if ($x_type == 'open') $php_stmt_main=$php_stmt.'[$x_type]'.$add.'[\'content\'] = $xml_elem[\'value\'];'; else $php_stmt_main=$php_stmt.'[$x_tag]'.$add.' = $xml_elem[\'value\'];'; eval($php_stmt_main); } if (array_key_exists('attributes', $xml_elem)) { if (isset($xml_elem['value'])) { $php_stmt_main=$php_stmt.'[$x_tag]'.$add.'[\'content\'] = $xml_elem[\'value\'];'; eval($php_stmt_main); } foreach ($xml_elem['attributes'] as $key=>$value) { $php_stmt_att=$php_stmt.'[$x_tag]'.$add.'[$key] = $value;'; eval($php_stmt_att); } } } return $xml_array; } ?>

Hola, creo que SimpleXml es muy útil. Y con él estoy usando xpath ;

$xml = simplexml_load_file("som_xml.xml");

$blocks  = $xml->xpath('//block'); //gets all <block/> tags
$blocks2 = $xml->xpath('//layout/block'); //gets all <block/> which parent are   <layout/>  tags

Uso muchas configuraciones xml y esto me ayuda a analizarlas muy rápido. SimpleXml está escrito en C por lo que es muy rápido.

Depende de lo que intente hacer con los archivos XML. Si solo está tratando de leer el archivo XML (como un archivo de configuración), The Wicked Flea es correcto al sugerir SimpleXML ya que crea lo que equivale a ArrayObjects anidados. p.ej. $ xml- > root- > child tendrá acceso al valor.

Si está buscando manipular los archivos XML, probablemente sea mejor usar DOM XML

el analizador crxml es realmente fácil de analizar.

Esta clase tiene una función de búsqueda, que toma un nombre de nodo con cualquier espacio de nombres como argumento. Busca en el xml el nodo e imprime la declaración de acceso para acceder a ese nodo utilizando esta clase. Esta clase también hace que la generación de xml sea muy fácil.

puedes descargar esta clase en

http://freshmeat.net/projects/crxml

o de phpclasses.org

http: //www.phpclasses. org / package / 6769-PHP-Manipulate-XML-documents-as-array.html

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