2013-02-18 3 views
0

Я читаю некоторые XML, используя PHP, но я не могу понять, как читать самозакрывающиеся теги. У меня есть <No_of_Rooms/> теги, которые когда-то присутствуют как <No_of_Rooms>3</No_of_Rooms>, а иногда и как <No_of_Rooms/>.
Каков правильный способ их прочитать?Как читать самозакрывающиеся теги XML с помощью PHP?

Это код, который я использую в настоящее время.

$rooms_tag = $property->getElementsByTagName("No_of_Rooms"); 
$exists = $rooms_tag->length > 0; 
if (!$exists) 
    $rooms=0; 
else  
    $rooms = $rooms_tag->item(0)->nodeValue; 
echo "Number of rooms : " . $rooms . "<br>"; 

Вот пример среды XML:

<property> 
    <Unit_Reference_No>EL-S-1028</Unit_Reference_No> 
    <No_of_Rooms/> 
    <Latitude>25.198519</Latitude> 
    <Longitude>55.275478</Longitude> 
    <unit_measure>Sq.Ft.</unit_measure> 
</property> 
+2

Что вы хотите сделать, покажите '0 комнат', если он не имеет значения? – MrCode

+0

Имеется ли в XML только один элемент ? –

+0

Можете ли вы показать нам XML? –

ответ

0

Убедитесь, что nodeValue элемента является не пустой строкой. Узел nodeValue DOMNode является строкой, и если нет значения, вы получите пустую строку, если вы посмотрите на любое свойство DOMNode-> nodeValue.

Я был в состоянии получить XML + код работает, изменив проверку на линии 2 $exists = $rooms_tag->item(0)->nodeValue != '';

Я думаю, вы также можете ввести в заблуждение себя с тем, как вы называете ваши переменные. getElementsByTagName() возвращает объект NodeList, который (потенциально) содержит несколько объектов DOMNode. Длина $ rooms_tag NodeList всегда будет> 0, если в вашем XML есть один элемент No_of_Rooms. Если бы я был переписать все, что она будет выглядеть следующим образом:

$rooms_list = $property->getElementsByTagName("No_of_Rooms"); 
$rooms_tag = $rooms_list->item(0); //or loop through the list if you expect multiple items. 

//if nodeValue has a value, set $num_rooms to that value, else set it to 0. 
$num_rooms = ($rooms_tag->nodeValue != '' ? $rooms_tag->nodeValue : 0); 
echo "Number of rooms : " . $num_rooms . "<br>";} 

Это (для меня во всяком случае) гораздо более ясно.

Смежные вопросы