SORU
2 Aralık 2009, ÇARŞAMBA


Nasıl PHP XMLReader kullanmak için?

Aşağıdaki XML dosyası var, dosya çok büyük ve XMLReader php hiçbir başarı ile çalışıyorum ve dosyayı açmak okumak için simplexml almak mümkün olmamıştır

<?xml version="1.0" encoding="ISO-8859-1"?>
<products>
    <last_updated>2009-11-30 13:52:40</last_updated>
    <product>
        <element_1>foo</element_1>
        <element_2>foo</element_2>
        <element_3>foo</element_3>
        <element_4>foo</element_4>
    </product>
    <product>
        <element_1>bar</element_1>
        <element_2>bar</element_2>
        <element_3>bar</element_3>
        <element_4>bar</element_4>
    </product>
</products>

Ne yazık ki PHP için bu iyi bir öğretici buldum ve her öğe bir veritabanında depolamak için içerik nasıl alabilirim görmek isterdim.

Şerefe!

CEVAP
2 Aralık 2009, ÇARŞAMBA


Bunun ne kadar büyük iş birimi bağlı, ama art arda <product/> her düğüm tedavi etmeye çalışıyorsun sanırım.

Bunun için en basit yol XMLReader her düğüm için, SimpleXML onlara erişmek için kullanın. Bu şekilde, bir kerede tek bir düğüm davranıyorsun çünkü bellek kullanımı düşük tutmak ve hala kullanım kolaylığı SimpleXML kaldıraç. Ö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');
}

Hızlı artılarını ve eksilerini farklı yaklaşımları genel bakış:

XMLReader sadece

  • Artıları: hızlı, az bellek kullanır

  • Eksileri: aşırı zor yazma ve hata ayıklama, kullanım alanı kod çok işe yarar bir şey yapmak gerekir. Kullanım alanı kod yavaş ve hataya açık. Artı, daha fazla kod satırlarını ile korumak için bırakır

XMLReader SimpleXML

  • Artıları: çok hafıza (bellek bir düğüm süreci için gerekli) kullanmıyor ve SimpleXML adından da anlaşılacağı gibi, gerçekten kullanımı kolaydır.

  • Eksileri: her düğüm için SimpleXMLElement nesnesi oluşturmak çok hızlı değil. Gerçekten sizin için bir sorun olup olmadığını anlamak için kriter. Hatta mütevazı bir makine saniyede bin düğümleri işlemek mümkün olur gerçi.

XMLReader DOM

  • Artıları: SimpleXML kadar bellek kullanır, ve XMLReader::expand() yeni bir SimpleXMLElement oluşturmak daha hızlıdır. simplexml_import_dom() kullanmak mümkün olmasını dilerdim ama bu durumda işe yaramıyor

  • Eksileri: DOM ile çalışmak için can sıkıcı bir durum. XMLReader ve SimpleXML tam ortasında. XMLReader, ama ışık yılı SimpleXML ile çalışma uzağa kadar karmaşık ve zor değil.

Benim tavsiyem: SimpleXML ile bir prototip, eğer sizin için çalışıp çalışmadığını görmek yazmak. Performans öncelikli ise, DOM deneyin. XMLReader mümkün olduğunca uzak durun. Daha fazla kod yazma, daha yüksek böcekleri tanıtan veya performans uygulama olasılığını regresyon unutmayın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Caramthros

    Caramthros

    10 AĞUSTOS 2007
  • circuschina

    circuschina

    16 Mart 2007
  • incognitotraveler

    incognitotra

    27 Mayıs 2010