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.
tam olarak ne sorun? xpath ifadesi sonuç vermiyor? xml ile ilişkilendirilmiş varsayılan bir ad alanı var mı? –
XML, maalesef varsayılan bir ad alanı içermiyor. –
@KeithHall Sorunu aldığım çıktıyla güncelledim. Umarım şimdi daha açık. –