SimpleXML Son Düğüm Seçimi

4 Cevap php

Ben xml dosyasında son düğümün niteliğini bulmak istiyorum.

Aşağıdaki kod bulmak ilk düğümün niteliği bulunuyor. Son düğümü bulmak için bir yolu var mı?

foreach ($xml->gig[0]->attributes() as $Id){
}

teşekkürler

4 Cevap

PHP ile aşina değilim ama bir XPath sorgusu kullanarak, aşağıdakileri deneyebilirsiniz:

foreach ($xml->xpath("//gig[last()]")[0]->attributes() as $Id){
}

Frank Bollack belirtildiği gibi son gig düğüm olsun, biz XPath'i kullanabilirsiniz.

foreach (current($xml->xpath('/*/gig[last()]'))->attributes() as $attr) {
}

Ya da biraz daha ayrıntılı ama daha güzel:

$attrs = array();
$nodes = $xml->xpath('/*/gig[last()]');
if (is_array($nodes) && ! empty($nodes)) {
    foreach ($nodes[0]->attributes() as $attr) {
        $attrs[$attr->getName()] = (string) $attr;
    }
}
var_dump($attrs);

O (öyle bir <gig/> düğüm veya başka türlü) son düğümü almak için XPath kullanabilirsiniz doğrudur ama aynı zamanda size ilk düğüm için kullanılan aynı teknikle yansıtabilirsiniz. Bu şekilde:

// first <gig/>
$xml->gig[0]

// last <gig/>
$xml->gig[count($xml->gig) - 1]

Düzenleme: Ben sadece fark ettik, sadece ilk @ id niteliğini ve son <gig/> düğüm almak için çalışıyoruz? Bu durumda, attributes() unutun ve yerine SimpleXML notasyonu kullanmak: Onlar Dizi anahtarları sanki nitelikleri erişilir.

$first_id = $xml->gig[0]['id'];
$last_id  = $xml->gig[count($xml->gig) - 1]['id'];

Ben bu xpath ifade çalışması gerektiğini düşünüyorum

$xml->xpath('root/child[last()]');

Yani kök elemanın bir çocuk olan son çocuk eleman almak gerekir.