Quelle est la différence entre les différentes bibliothèques d'analyse XML de PHP5?

StackOverflow https://stackoverflow.com/questions/246819

  •  05-07-2019
  •  | 
  •  

Question

La question initiale est ci-dessous, mais j'ai changé le titre car je pense qu'il sera plus facile de trouver d'autres personnes avec le même doute. Au final, un document XHTML est un document XML.

C'est une question pour débutant, mais j'aimerais savoir quelle est, selon vous, la meilleure bibliothèque pour analyser des documents XHTML en PHP5?

J'ai généré le XHTML à partir de fichiers HTML (créés à l'aide de Word: S) avec Tidy, et je sais que je dois en remplacer certains éléments (comme l'élément and, remplacer certains attributs dans

balises).

Je n'ai pas beaucoup utilisé XML, il semble exister de nombreuses options pour l'analyse syntaxique en PHP (XML simple, DOM, etc.) et je ne sais pas si elles peuvent toutes faire ce dont j'ai besoin, c'est-à-dire le plus facile à utiliser.

Désolé pour mon anglais, je viens de l’Argentine. Merci!

Je mets un peu plus d'informations: J'ai beaucoup de pages HTML, réalisées dans Word 97. J'ai utilisé Tidy pour les nettoyer et les transformer en XHTML Strict. Elles sont donc toutes compatibles XML. Je veux utiliser un analyseur XML pour trouver des éléments et les remplacer (la logique selon laquelle je fais cela n'a pas d'importance). Par exemple, je souhaite que toutes les pages utilisent les mêmes attributs de feuille de style et de classe CSS, pour une apparence unifiée. Ce sont toutes des pages statiques contenant des documents légaux, rien d’étrange là-bas. Laquelle des extensions devrais-je utiliser? SimpleXML est-il suffisant? Devrais-je apprendre le DOM en dépit d'être plus difficile?

Était-ce utile?

La solution

Juste pour clarifier la confusion ici. PHP a un certain nombre de bibliothèques XML, parce que php4 n’avait pas de très bonnes options dans cette direction. Depuis PHP5, vous avez le choix entre SimpleXml , DOM et le analyseur d'expats basé sur un saxo . Ce dernier existait aussi dans php4. php4 avait également une extension DOM, ce qui n'est pas identique à celui de php5.

DOM et SimpleXml sont des alternatives au même domaine problématique; Ils téléchargent le document en mémoire et vous permettent d'y accéder sous forme d'arborescence. DOM est une API plutôt volumineuse, mais elle est également très cohérente et est implémentée dans de nombreuses langues, ce qui signifie que vous pouvez réutiliser vos connaissances entre les langues (en Javascript par exemple). SimpleXml peut être plus facile au début.

L’analyseur SAX est une bête différente. Il traite un document XML comme un flux de balises. Ceci est utile si vous traitez de très gros documents, car vous n'avez pas besoin de tout garder en mémoire.

Pour votre utilisation, j'utiliserais probablement l'api DOM.

Autres conseils

Vous pouvez utiliser SimpleXML , inclus dans une installation PHP par défaut. Cette extension offre un accès facile, orienté objet, aux structures XML.

Il existe également un DOM XML . Un " inconvénient " à cette extension, c’est qu’il est un peu plus difficile à utiliser et qu’il n’est pas inclus par défaut.

  • DOM est une API standard, indépendante du langage, utilisée pour les données hiérarchiques telles que XML, normalisée par le W3C. C'est une API riche avec beaucoup de fonctionnalités. Il est basé sur les objets, chaque noeud étant un objet.

    DOM est utile lorsque vous voulez non seulement lire ou écrire, mais également manipuler beaucoup de nœuds dans un document existant, comme insérer des nœuds entre eux, modifier la structure, etc.

  • SimpleXML est une API spécifique à PHP, qui est également basée sur les objets, mais qui se veut beaucoup moins "succincte" que le DOM: des tâches simples, telles que la recherche de la valeur d'un noeud ou trouver ses éléments enfants prennent beaucoup moins de code. Son API n'est pas aussi riche que DOM, mais elle inclut toujours des fonctionnalités telles que les recherches XPath et une capacité de base de travailler avec des documents à espaces de noms multiples. Et surtout, il conserve toutes les fonctionnalités de votre document, telles que les sections XML CDATA et les commentaires, même s'il n'inclut pas de fonctions permettant de les manipuler.

    SimpleXML est très bon pour la lecture seule: si tout ce que vous voulez, c'est lire le document XML et le convertir en un autre formulaire, cela vous épargnera beaucoup de code. Il est également assez utile de générer un document ou d'effectuer des manipulations de base telles que l'ajout ou la modification d'éléments ou d'attributs enfants, mais il peut s'avérer compliqué (mais pas impossible) de manipuler beaucoup de documents existants. Il n'est pas facile, par exemple, d'ajouter un élément enfant entre deux autres. addChild insère uniquement après d'autres éléments. SimpleXML ne peut pas non plus effectuer de transformations XSLT. Il ne contient pas d'éléments comme 'getElementsByTagName' ou getElementById ', mais si vous connaissez XPath, vous pouvez toujours faire ce genre de chose avec SimpleXML.

    L'objet SimpleXMLElement est un peu 'magique'. Les propriétés qu'il expose si vous var_dump / printr / var_export ne correspondent pas à sa représentation interne complète. Il expose certains de ses éléments enfants comme s'il s'agissait de propriétés auxquelles on peut accéder avec le paramètre - > opérateur, mais conserve néanmoins l'intégralité du document en interne, et vous pouvez, par exemple, accéder à un élément enfant dont le nom est un mot réservé avec l'opérateur [] comme s'il s'agissait d'un tableau associatif.

Vous n'êtes pas obligé de vous engager pleinement dans l'un ou l'autre, car PHP implémente les fonctions:

  • simplexml_import_dom (DOMNode)
  • dom_import_simplexml (SimpleXMLElement)

Ceci est utile si vous utilisez SimpleXML et avez besoin de travailler avec du code qui attend un nœud DOM ou inversement.

PHP propose également une troisième bibliothèque XML:

  • L'Analyseur XML (une implémentation de SAX , une interface indépendante de la langue, mais non désigné par ce nom dans le manuel) est un niveau beaucoup plus bas. bibliothèque, qui sert un but tout à fait différent. Il ne construit pas d'objets pour vous. En gros, cela facilite simplement l'écriture de votre propre analyseur XML, car il permet de passer au jeton suivant et de rechercher le type de jeton, tel que le nom de la balise et s'il s'agit d'une balise d'ouverture ou de fermeture. . Ensuite, vous devez écrire des rappels à exécuter chaque fois qu'un jeton est rencontré. Toutes les tâches telles que représenter le document sous forme d'objets / de tableaux dans une arborescence, manipuler le document, etc. devront être implémentées séparément, car tout ce que vous pouvez faire avec l'analyseur XML est d'écrire un analyseur de bas niveau.

    Les fonctions de l'analyseur XML sont toujours très utiles si vous avez des besoins spécifiques en termes de mémoire ou de vitesse. Avec lui, il est possible d'écrire un analyseur syntaxique capable d'analyser un très long document XML sans conserver tout son contenu en mémoire à la fois. De plus, si vous n'êtes pas intéressé par toutes les données et que vous n'avez pas besoin ou ne souhaitez pas que ces données soient placées dans une arborescence ou un ensemble d'objets PHP, cela peut être plus rapide. Par exemple, si vous souhaitez parcourir un document XHTML et rechercher tous les liens, sans vous soucier de la structure.

Je préfère SimpleXMLElement , car il est très facile à utiliser. à travers des éléments.

Modifier: Aucune information de version n'est disponible, mais elle est disponible en PHP5, au moins 5.2.5 mais probablement plus tôt.

C’est un choix vraiment personnel, mais il existe de nombreuses extensions XML . .

N'oubliez pas que de nombreux analyseurs syntaxiques XML hésiteront si vous avez un balisage non valide - XHTML doit être XML mais pas toujours!

Cela fait longtemps (2 ans ou plus) que j'ai travaillé avec l'analyse XML en PHP, mais j'ai toujours eu de bons résultats utilisables tirés de package XML_Parser Pear . Cela dit, je n’ai que très peu d’expérience PHP5. Je ne sais donc pas vraiment s’il existe de meilleures alternatives intégrées de nos jours.

J'ai fait un peu d'analyse XML en PHP5 l'année dernière et j'ai décidé d'utiliser une combinaison de SimpleXML.

DOM est un peu plus utile si vous souhaitez créer une nouvelle arborescence XML ou ajouter à une arborescence existante, sa légèrement plus de flexibilité.

Cela dépend vraiment de ce que vous essayez d'accomplir. Pour extraire des quantités assez importantes de données, par exemple un grand nombre d'enregistrements, d'informations sur les produits d'un site Web de magasin, j'utiliserais probablement Expat, car il est censé être un peu plus rapide ... Personnellement, j'ai suffisamment de XML pour créer un gain de performance notable. À ces quantités, vous pourriez aussi bien utiliser SQL.

Je recommande d'utiliser SimpleXML. C'est assez intuitif, facile à utiliser / écrire. Fonctionne également très bien avec XPath.

Vous n'avez jamais vraiment utilisé DOM beaucoup, mais si vous utilisez XML Parser, vous voudrez peut-être l'utiliser, car il est un peu plus fonctionnel que SimpleXML.

Vous pouvez en savoir plus sur les trois écoles du W3C:

http://www.w3schools.com/php/php_xml_parser_expat.asp

http://www.w3schools.com/php/php_xml_simplexml.asp

http://www.w3schools.com/php/php_xml_dom.asp

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