Analyse de très gros fichiers XML en php
J'ai besoin d'analyser des fichiers XML de 40 go en taille, et ensuite de les normaliser et de l'insérer à une base de données MySQL. Combien de fichier que j'ai besoin de stocker dans la base de données n'est pas clair, ni puis-je savoir la structure XML.
Analyseur dois-je utiliser et comment feriez-vous pour faire cela?
Pour les gros fichiers, utilisez toujours un pull analyseur comme XMLReader; juste essayer de chargement de 40 go de fichier dans la mémoire de SimpleXML.
à partir de l'related posts: stackoverflow.com/questions/911663/...
40 Go? Wow, j'ai eu des ennuis avec un 700 Mo fichier xml sur un mac os x de la machine.
Je vous suggère d'écrire votre propre parseur XML avec un minimum de fonctionnalités (uniquement les fonctionnalités que vous voulez). De cette façon, vous avez le plus de lumière-wieght analyseur XML possible, et bien sûr continuer à optimiser régulièrement
c'est un fou de la suggestion. Certains des meilleurs programmeurs sur la planète ont écrit hautement optimisé parseurs XML, la chance de la moyenne de l'affiche de pouvoir faire mieux, c'est très petit.
à partir de l'related posts: stackoverflow.com/questions/911663/...
40 Go? Wow, j'ai eu des ennuis avec un 700 Mo fichier xml sur un mac os x de la machine.
Je vous suggère d'écrire votre propre parseur XML avec un minimum de fonctionnalités (uniquement les fonctionnalités que vous voulez). De cette façon, vous avez le plus de lumière-wieght analyseur XML possible, et bien sûr continuer à optimiser régulièrement
c'est un fou de la suggestion. Certains des meilleurs programmeurs sur la planète ont écrit hautement optimisé parseurs XML, la chance de la moyenne de l'affiche de pouvoir faire mieux, c'est très petit.
OriginalL'auteur clean_coding | 2013-03-12
Vous devez vous connecter pour publier un commentaire.
En PHP, vous pouvez le lire dans l'extrême les gros fichiers XML avec le
XMLReader
Docs:Extrême gros fichiers XML doivent être stockées dans un format compressé sur le disque. Au moins cela a un sens en tant que fichiers XML ont un taux de compression élevé. Par exemple au format gzip comme
large.xml.gz
.PHP supporte très bien avec
XMLReader
via le la compression des wrappersDocs:La
XMLReader
vous permet de faire fonctionner sur l'élément courant "seulement". Cela signifie qu'il est avant uniquement. Si vous avez besoin de garder un analyseur de l'état, vous avez besoin pour construire votre propre.Je trouve souvent qu'il est utile pour envelopper les mouvements de base dans un ensemble de itérateurs qui savent comment fonctionnent sur
XMLReader
comme l'itération sur les éléments ou l'enfant-éléments seulement. Vous trouvez cette décrites dans Parser du XML avec PHP et XMLReader.Voir ainsi:
OriginalL'auteur hakre
Il serait bon de savoir ce que vous avez réellement l'intention de faire avec le fichier XML. La façon dont vous analysez cela dépend beaucoup sur le traitement, vous devez réaliser, ainsi que de la taille.
Si c'est un one-off de la tâche, puis j'ai commencé dans le passé par la découverte de la structure XML avant de faire quelque chose d'autre. Mon DTDGenerator (voir saxon.sf.net) a été écrit à cette fin il y a longtemps et toujours fait le travail, il y a d'autres outils disponibles maintenant, mais je ne sais pas si ils le font en streaming transformation, ce qui est une condition préalable ici.
Vous pouvez écrire une application qui traite les données à l'aide d'un pull ou push en streaming parser (SAX ou StAX). Comment facile c'est dépend de la façon dont beaucoup le traitement que vous avez à faire et comment bien l'état que vous avez à maintenir, à qui vous n'avez pas dit de nous. Sinon, vous pouvez essayer en streaming XSLT, qui est disponible dans le Saxon-EE.
OriginalL'auteur Michael Kay