1 elemanının daha etiketleri SimpleXML

3 Cevap php

Hey guys, bazı xml ayrıştırma istiyorum ama ben 1 elemanının dışında aynı etiketleri alabilirsiniz bilmiyorum.

Ben bu ayrıştırmak istiyorum:

<profile>
   <name>john</name>
   <lang>english</lang>
   <lang>dutch</lang>
</profile>

Yani john konuşuyor dilleri ayrıştırmak istiyorum. Bunu nasıl yapabilirim?

3 Cevap

Eğer çok gibi SimpleXML ile çekti yaptıktan sonra eleman düğüm üzerinde foreach döngü çalıştırabilirsiniz:

$xml_profiles = simplexml_load_file($file_profiles);

foreach($xml_profiles->profile as $profile)
{   //-- first foreach pulls out each profile node

    foreach($profile->lang as $lang_spoken)
    {   //-- will pull out each lang node into a variable called $lang_spoken
        echo $lang_spoken;
    }
}

Bu, her profil öğesi için sahip olması ya da olmayabilir lang herhangi bir sayıda öğe işlemek mümkün olmanın yararı vardır.

Bir dizi gibi davranıyor olarak yinelenen XML düğümleri düşünün.

Diğer işaret olarak braket sözdizimi ile alt düğümlerin erişebilirsiniz

myXML->childNode[childIndex]

Bir yan not olarak bu RSS beslemeleri işi nasıl. Sen birden göreceksiniz

<item>
</item>

<item>
</item>

<item>
</item>

RSS XML bir etiketi içinde Etiketler. RSS okuyucuları elemanlarının bir dizi olarak listesini tedavi ederek her gün bu sorunla başa.

Üzerinde döngüye hangi.

Ayrıca gibi özel unsurların bir dizi toplamak için XPath'i kullanabilirsiniz

$xProfile = simplexml_load_string("<profile>...</profile>");
$sName = 'john';
$aLang = $xProfile->xpath("/profile/name[text()='".$sName."']/lang");
// Now $aLang will be an array of lang *nodes* (2 for John). Because they
// are nodes you can still do SimpleXML "stuff" with them i.e.
// $aLang[0]->attributes(); --which is an empty object
// or even

$sPerson = (string)$aLang[0]->xpath('preceding-sibling::name');
// of course you already know this... but this was just to show what you can do
// with the SimpleXml node.