2016-03-23 16 views
0

Aşağıdaki gülünç biçimlendirilmiş XML beslemesini PHP'de ayrıştırmam gerekiyor. 'Emlak tipi' bir düğüme sahip olmayı düşünmeyen bir emlak firmasından geliyor - bunun yerine daireler için 'daire' bir düğüme sahipler, evler için bir 'ev' düğümü var. Benim sorunum altımı almam gerektiğidir. 'yatak odası', 'alt_tip' ve diğer bilgileri almak için bunlardan düğümler (bu orijinalin çok soyulmuş bir versiyonudur).Bu XML beslemesini PHP'de nasıl ayrıştırırsınız?

<properties> 
<property> 
    <general_info> 
     <id>1</id> 
    </general_info> 
    <apartment> 
     <sub_type>1</sub_type> 
     <bedrooms>2</bedrooms> 
    </apartment> 
</property> 
<property> 
    <general_info> 
     <id>2</id> 
    </general_info> 
    <house> 
     <sub_type>3</sub_type> 
     <bedrooms>5</bedrooms> 
    </house> 
</property> 
<property> 
    <general_info> 
     <id>3</id> 
    </general_info> 
    <business> 
     <sub_type>6</sub_type> 
     <bedrooms>0</bedrooms> 
    </business> 
</property> 

Ben 'kepçe' beslemesine simplexml_load_file kullanarak ve elementler üzerinde bir foreach döngüsü sahnede oluyorum. Bazı araştırmalardan sonra xpath yardım eder gibi görünüyor, ama işe yaramaz.

İşte benim kod temelleri var:

$xmlObject = simplexml_load_file($XML_FILE_NAME); 

foreach($xmlObject->property as $property) 
{ 

    // Get Property sub-type 
    $property_sub_types = $property->xpath('//sub_type'); 
    foreach($property_sub_types as $sub_type) 
    { 
     print_r($sub_type); // printing to screen for demo purposes 
    } 
} 

Bu alıyorum çıkıştır. Doğru değerlerdir, ancak gösterilen 3 kez yerine

SimpleXMLElement Object 
(
    [0] => 1 
) 
SimpleXMLElement Object 
(
    [0] => 3 
) 
SimpleXMLElement Object 
(
    [0] => 6 
) 
SimpleXMLElement Object 
(
    [0] => 1 
) 
SimpleXMLElement Object 
(
    [0] => 3 
) 
SimpleXMLElement Object 
(
    [0] => 6 
) 
SimpleXMLElement Object 
(
    [0] => 1 
) 
SimpleXMLElement Object 
(
    [0] => 3 
) 
SimpleXMLElement Object 
(
    [0] => 6 
) 

kimse bana doğru yönde işaret edebilir 1. çok takdir ediyorum. Oh, ve sen sormadan önce, onların yemlerini yeniden yapmalarını sağlamak bir seçenek değil.

+1

tam olarak ne sorun? xpath ifadesi sonuç vermiyor? xml ile ilişkilendirilmiş varsayılan bir ad alanı var mı? –

+0

XML, maalesef varsayılan bir ad alanı içermiyor. –

+0

@KeithHall Sorunu aldığım çıktıyla güncelledim. Umarım şimdi daha açık. –

cevap

1

Kişisel xpath //sub_type inci bütün belgedeki tüm sub_type elemanlarını seçer.
.//sub_type olarak değiştirin

+0

Sorunumun cevabını aynı anda bulduğum görünen hr_117 ve @IMSoP sayesinde. Bu önemli nokta eklemek benim için sorunu çözüyor - teşekkürler çocuklar! –

1
Please find below code : 
Are you exactly want to like this? 


$xmlObject = simplexml_load_file("XML File Path"); 
//print_r($xmlObject); 
foreach($xmlObject->property as $property) 
{  
    foreach($property as $test){ 
     //print_r($test->sub_type); 
     echo "Bedrooms:-" .$test->bedrooms."&nbsp;&nbsp;&nbsp;"; 
     echo "Sub Type:".$test->sub_type; 
     //print_r($property->business->sub_type); 
     echo "</br>"; 
    } 
} 
+0

Teşekkürler @ gaurav-jariwala. Bu, doğru verileri verir, ancak her döngüdeki doğru verilere ek olarak "Yatak Odası: - Alt Tür:" de çıkar. Bunu nasıl başarabiliriz? –

+0

xpaht kullanmaz, ancak yapmalıdır. +1 –

İlgili konular