PHP büyük XML Ayrıştırma

6 Cevap php

Ben (300 MB gibi) PHP oldukça büyük XML ayrıştırmak gerekiyor. I nasıl en etkili şekilde yapabiliriz?

Özellikle, ben spesifik etiketleri bulmak ve düz bir TXT dosyası, daha hiçbir şey kendi içeriği ayıklamak gerekir.

6 Cevap

Bir ya da birkaç kez iş olursa ben kullanmak istiyorum XML Starlet. Eğer gerçekten bunu PHP yan yapmak istiyorum ama sonra küçük parçalar için preparse ve sonra işleme için tavsiye ederim. Eğer üzerinden yüklerseniz DOM büyük bir yığın olarak bu bellek a lot alacaktır. Ayrıca şeyleri hızlandırmak için CLI tarafı PHP komut dosyası kullanabilirsiniz.

Okumanız ve PHP'nin kullanarak eski okul SAX-based parsing yaklaşımı ile topakları XML ayrıştırmak xml parser functions.

Sadece okumak ve bir seferde bir tampon-tam ayrıştırmak gibi bu yaklaşımı kullanarak, ayrıştırmak belgelerin boyutu gerçek sınırı var. Çözümleyici etiketleri, veri vb buldu gösteren olaylar ateş edecek

Başlangıç ​​ve etiketleri sonuna kadar almak için nasıl gösterir kılavuzda bir simple exampl e var. Amaçlar için de ayrıca etiketleri arasındaki metin üzerinde pick up, böylece xml_set_character_data_handler kullanmak isteyebilirsiniz.

Bunu yapmak için en etkili yolu XSLTProcessor . The method names are a bit misleading. Even though you want to output plain text, you should use either transformToXML() if you need is as a string variable, or transformToURI() isterseniz yazmak için statik XSLT oluşturmak ve kullanarak XML uygulamak için bir dosya.

Bu SAX için tasarlanmıştır budur. SAX veri ve ateşleme olayların küçük bir tampon düşük bir bellek izi okuma var bu unsurları, karakter verileri vb karşılaştığınızda

Bu SAX kullanmak için nasıl her zaman açık değildir, iyi benim için çok genellikle sona erecek ben kullandım ama özünde sen belge yapısı içinde nerede olarak kendi durumunu ve görünümünü korumak zorunda ilk kez değildi Eğer örneğin olan belgenin hangi bölüm açıklayan değişkenler ile Infoo, belirli başlangıç ​​/ bitiş elemanları karşılaştığınızda ayarladığınız Inbar vb.

Saksofon çözümleyici kısa bir açıklama ve örnek vardır here

Çekme ayrıştırma gitmek için yoludur. Bu şekilde bellek verimli VE işlemek kolaydır. Ben 50 Mb veya daha fazlası kadar büyük olan dosyaları işleme edilmiştir.

Bellek gereksinimlerine bağlı olarak, bu kadar yük ya ve parse it with XSLT (bellek tüketen rota), ya da bir forward-only cursor oluşturabilir ve ağaca kendinizi yürümek, değerlerini yazdırmakta '(bellek verimli rota) arıyorsanız.