2013-02-18 50 views
0

我正在閱讀一些使用PHP的XML,但我無法弄清楚如何閱讀自閉標籤。我有<No_of_Rooms/>標籤有時代表自己<No_of_Rooms>3</No_of_Rooms>,有時作爲<No_of_Rooms/>
什麼是正確的方式來閱讀這些?如何閱讀使用PHP自我關閉XML標記?

這是我目前使用的代碼。

$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 2013-02-18 10:15:02

+0

你的XML是否只包含單一的元素? – 2013-02-18 10:17:06

+0

你能告訴我們XML嗎? – 2013-02-18 10:18:43

回答

0

檢查元素的nodeValue是不是空字符串。 DOMNode的nodeValue是一個字符串,如果沒有設置值,當您查看任何DOMNode-> nodeValue屬性時,您將獲得一個空字符串。

我能得到你的XML +代碼通過更改第2行檢查工作,$exists = $rooms_tag->item(0)->nodeValue != '';

我想你也可以用你的名字你變量的方法迷惑自己。 getElementsByTagName()返回一個NodeList對象,該對象(可能)保存多個DOMNode對象。如果您的XML中只有一個No_of_Rooms元素,則$ rooms_tag NodeList的長度將始終> 0。如果我要重寫所有的,它應該是這樣的:

$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>";} 

這是(我反正)更清晰。

相關問題