Question

    

Cette question a déjà une réponse ici:

         

J’avais déjà utilisé l’analyseur XML auparavant, et même si cela fonctionnait bien, je n’étais pas satisfait de mon utilisation en général, c’était comme si j’utilisais des solutions de contournement pour des choses qui devraient être des fonctionnalités de base.

J'ai récemment vu SimpleXML mais je ne l'ai pas encore essayé. Est-ce plus simple? Quels sont les avantages et les inconvénients des deux? D'autres analyseurs que vous avez utilisés?

Était-ce utile?

La solution

Je dirais que SimpleXML prend le gâteau, car c'est d'abord une extension, écrit en C, et est très rapide. Mais deuxièmement, le document analysé prend la forme d'un objet PHP. Ainsi, vous pouvez " interroger " comme $ root- > myElement .

Autres conseils

Consultez les extensions XML disponibles pour PHP et consultez http://devzone.zend.com/243/ et http://devzone.zend.com/1035/ pour une discussion à ce sujet.

La principale différence entre XML Parser et SimpleXML est que ce dernier n’est pas un analyseur Pull. SimpleXML est construit sur les extensions DOM et chargera la totalité du fichier XML en mémoire. Un analyseur XML comme XMLReader ne chargera que le nœud actuel en mémoire. Vous définissez des gestionnaires pour des nœuds spécifiques qui seront déclenchés lorsque l’analyseur le rencontrera. C'est plus rapide et permet d'économiser de la mémoire. Vous ne payez que pour ne pas pouvoir utiliser XPath.

Personnellement, je trouve SimpleXml assez limitatif (donc simple) dans ce qu’il offre sur DOM. Vous pouvez facilement basculer entre DOM et SimpleXml, mais je ne me dérange généralement pas et choisis directement la route DOM. DOM est une implémentation de l'API DOM du W3C. Vous pouvez donc vous en familiariser avec d'autres langages, par exemple JavaScript.

C’est une fonction utile pour l’analyse xml rapide et facile quand une extension n’est pas 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
    

C’est une fonction utile pour l’analyse xml rapide et facile quand une extension n’est pas 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 (

C’est une fonction utile pour l’analyse xml rapide et facile quand une extension n’est pas disponible:

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

C’est une fonction utile pour l’analyse xml rapide et facile quand une extension n’est pas 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; } ?>

Bonjour, je pense que le SimpleXml est très utile. Et avec cela, j'utilise 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

J'utilise beaucoup de configurations xml et cela m'aide à les analyser très rapidement. SimpleXml est écrit sur C , donc c'est très rapide.

Cela dépend de ce que vous essayez de faire avec les fichiers XML. Si vous essayez simplement de lire le fichier XML (comme un fichier de configuration), The Wicked Flea suggère correctement SimpleXML car il crée ce qui équivaut à un ArrayObjects imbriqué. par exemple. la valeur sera accessible par $ xml- > racine- > enfant.

Si vous souhaitez manipuler les fichiers XML, il vaut mieux utiliser DOM XML

.

L’analyseur crxml est très facile à analyser.

Cette classe a une fonction de recherche, qui prend un nom de nœud avec un espace de nom comme argument. Il recherche le noeud dans le fichier XML et imprime la déclaration d'accès pour accéder à ce noeud à l'aide de cette classe. Cette classe facilite également la génération XML.

vous pouvez télécharger cette classe à

http://freshmeat.net/projects/crxml

ou de phpclasses.org

http: //www.phpclasses. org / package / 6769-Manipuler-PHP-documents-as-tableau.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top