Kısa Versiyon: Sen en azından doğrudan, yok. Bu XMLReader ile ayrıştırma algoritması içine bağlamı kod programcı kalmış.
Uzun Sürüm: PHP'nin XMLReader bir pull parser adlandırılan şeydir. Pull ayrıştırıcılar onlar metin akışları ile başa çıkabilirim bir ağaç / dom tabanlı çözümleyici farklıdır. Diğer bir deyişle, onlar tüm belge var önce belgeyi ayrıştırma başlayabilirsiniz. Bu her şeyi yapabilir önce belleğe tüm belgeyi gerekiyor SimpleXML veya DOMDocument gibi bir ağaç tabanlı / DOM çözümleyici farklıdır.
Avantajı 75MB XML dosyası varsa onunla başa çıkmak için ücretsiz RAM 75MB gerekmez, (Eğer bir ağaç tabanlı çözümleyici ile olduğu gibi). Trade-off ayrıştırıcılarda tüm belgenin içeriğini asla çekmek. Sadece şu anda işlem için ne olursa olsun düğüm bağlamı var.
Bunu düşünmek için başka bir yolu ağaç / dom tabanlı ayrıştırıcı sizin için bunu sormak için gidiyoruz ne bilmiyor çünkü belgenin her parçası hakkında bilmek zorunda değildir. Sen ve çekme ayrıştırıcı, ancak, farklı bir düzenleme yaptık. Bu size atma düğümleri tutmak ve onların içeriği ile başa çıkmak için o kadar bırakacağım.
Burada ne peşinde (umarım) yakın bazı örnek kod.
$xml = new XMLReader();
$xml->open('example.xml');
$last_node_at_depth = array();
while($xml->read())
{
//stash the XML of the entire node in an array indexed by depth
//you're probably better off stashing exactly what you need from
$last_node_at_depth[$xml->depth] = $xml->readOuterXML();
$xml->localName; // gives tag name
$xml->value; // gives tag value
//so, right now we're at depth n in the XML document. depth n-1
//would be our parent node
if ($xml->depth > 0) {
//gives the fragment that starts with the parent node
$last_node_at_depth[($xml->depth-1)];
}
}