我正在使用PHP阅读一些XML,但我无法弄清楚如何阅读自闭标签。我有<No_of_Rooms/>
个标签,有时会将其标记为<No_of_Rooms>3</No_of_Rooms>
,有时标记为<No_of_Rooms/>
。
阅读这些内容的正确方法是什么?
这是我目前正在使用的代码。
$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>
答案 0 :(得分:0)
检查元素的nodeValue不是空字符串。 DOMNode的nodeValue是一个字符串,如果没有设置值,当您查看任何DOMNode-&gt; nodeValue属性时,您将获得一个空字符串。
通过将第2行的检查更改为$exists = $rooms_tag->item(0)->nodeValue != '';
我认为你也可能会对自己命名变量的方式感到困惑。 getElementsByTagName()
返回一个NodeList
对象,该对象(可能)包含多个DOMNode
个对象。 $ rooms_tag NodeList
的长度始终为&gt;如果XML中有一个No_of_Rooms元素,则为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>";}
这对我(无论如何)更清楚。