PHP XML Ayrıştırma

5 Cevap php

Hangi PHP bir XML dosyasını ayrıştırmak için en iyi yolu nedir?

First
Using the DOM object

//code
$dom = new DOMDocument();
$dom->load("xml.xml");

$root = $dom->getElementsByTagName("tag");
foreach($root as $tag)
{
$subChild = $root->getElementsByTagName("child");

// extract values and loop again if needed
}

Second
Using the simplexml_load Method

// code
$xml = simplexml_load_string("xml.xml");
$root = $xml->root;
foreach($root as $tag)
{
$subChild = $tag->child;
// extract values and loop again if needed
}

Note : These are the two I am aware of. If there are more fill in.

Büyük XML dosyalarını ayrıştırma için en iyi yöntemi bilmek istedim, aynı zamanda fastest bakılmaksızın yol yöntem uygulanması gereken hangi yöntem

Boyut 2MB 500KB değişen olacaktır. Ayrıştırıcı iyi bellek kullanımı mümkünse ile zaman az miktarda küçük hem de büyük dosyaları ayrıştırmak gerekir.

5 Cevap

Ben XML dosyalarını ayrıştırmak için XMLReader kullanmaya başladı. Etrafında googling biraz yapıyor sonra o belleğe bütün XML dosyası yüklemek değil gibi yol XML dosyalarını ayrıştırmak için iyi buldum. Benim XML dosyaları 5 MB oldu varsayalım eğer boşa almaz benim bellek XMLReader 5MB kullanarak ayrıştırma ise, söyleyin.

//usage
$xml = new XMLReader();
$xml->XML($xmlString);
while($xml->read)
{
if($xml->localName == 'Something') // check if tag name equals something
{
//do something
}
}

Biz mevcut etiketi bir açılış etiketi veya kapanış etiketi olup olmadığını bulmak ve gerektiği gibi yapmak lazım XML Reader kullanma.

Bu geçen konum belge bağlıdır, ancak genellikle XMLReader SimpleXML ve DOM hem de daha hızlıdır (http://blog.liip.ch/archive/2004/05/10/processing_large_xml_documents_with_php.html). Ben XMLReader kullanılan ve genellikle hangi ben düzenlemek gerek olup olmadığına bağlı olarak kullanmaya karar hiç Şahsen olsa:

  • Ben sadece bir belgeyi okuyorum eğer SimpleXML
  • DOM I DOM değiştirme ve geri saklıyorum eğer

Ayrıca SimpleXML ve DOM arasında nesneleri dönüştürebilirsiniz.

Eğer işlem yapıyorsanız huge dosyaları bunları ayrıştırmak değil. Uygula XSLT yerine. Bu size bellek ve işlemci zaman büyük miktarda tasarruf edeceksiniz.

Ben kullanım kolaylığı için simplexml_load_string tercih. Kendi dosyaları üzerinde denemek ve sizin için daha iyi olduğunu görmek - dosyayı ayrıştırma iki kullanım farklı yöntem işlenmek hız da XML dosyası biçimine bağlı olabilir.

Ben geliştiren tüm XML şimdi PHP SimpleXML tarafından işlenir. Gerektiğinde kolayca genişletilmiş ve yöntemleri üzerine oluyor.