Her ne kadar büyük iş birimi bağlıdır, ama arka arkaya her <product/>
düğümleri tedavi etmek için çalışıyoruz sanırım.
Bunun için, basit yolu her düğüm almak için XMLReader kullanmak olacaktır, daha sonra onlara erişmek için SimpleXML kullanın. Bir seferde bir düğüm tedavi ediyoruz ve hala kullanım SimpleXML kolaylığını kaldıraç, çünkü bu şekilde, bellek kullanımı düşük tutmak. Örneğin:
$z = new XMLReader;
$z->open('data.xml');
$doc = new DOMDocument;
// move to the first <product /> node
while ($z->read() && $z->name !== 'product');
// now that we're at the right depth, hop to the next <product/> until the end of the tree
while ($z->name === 'product')
{
// either one should work
//$node = new SimpleXMLElement($z->readOuterXML());
$node = simplexml_import_dom($doc->importNode($z->expand(), true));
// now you can use $node without going insane about parsing
var_dump($node->element_1);
// go to next <product />
$z->next('product');
}
Farklı yaklaşımların artılarını ve eksilerini hızlı bir bakış:
XMLReader only
Artıları: hızlı, az bellek kullanıyor
Eksileri: yazmak ve hata ayıklama için aşırı sert, yararlı bir şey yapmak için userland kod sürü gerektirir. Userland kod yavaş ve hata eğilimli. Artı, o korumak için daha fazla kod hatları ile size bırakır
XMLReader + SimpleXML
Artıları: (sadece bellek bir düğüm işlemek için gerekli) ve adından da anlaşılacağı gibi SimpleXML kullanımı gerçekten çok kolay, bir fazla bellek kullanmaz.
Eksileri: her düğüm için bir SimpleXMLElement nesnesi oluşturarak çok hızlı değil. Eğer gerçekten bu sizin için bir sorun olup olmadığını anlamak için kriter var. Hatta mütevazı olsa makine, saniyede bin düğümleri işlemek mümkün olacaktır.
XMLReader + DOM
Artıları: SimpleXML kadar bellek hakkında kullanır, ve XMLReader::expand(), yeni bir SimpleXMLElement oluşturmak daha hızlıdır. Ben simplexml_import_dom()
kullanmak mümkün olsaydı ama bu durumda çalışmak için görünmüyor
Eksileri: DOM ile çalışmak için can sıkıcı. Bu yarım XMLReader ve SimpleXML arasında bulunuyor. Uzakta SimpleXML ile çalışan karmaşık ve XMLReader gibi garip, ama hafif değil yıl.
Benim tavsiyem: SimpleXML ile bir prototip yazmak sizin için çalıştığını görmek. Performans öncelikli ise, DOM deneyin. Kadar uzakta XMLReader mümkün olduğunca kalmak. Daha fazla kod Eğer hata tanıtmak veya performansı regresyon tanıtılması olasılığı yüksek, yazma unutmayın.