我应该如何使用PHP阅读自动关闭的XML标签?

时间:2013-02-18 10:12:07

标签: php xml domdocument

我正在使用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>

1 个答案:

答案 0 :(得分:0)

检查元素的nodeValue不是空字符串。 DOMNode的nodeValue是一个字符串,如果没有设置值,当您查看任何DOMNode-&gt; nodeValue属性时,您将获得一个空字符串。

通过将第2行的检查更改为$exists = $rooms_tag->item(0)->nodeValue != '';

,我能够使您的XML +代码正常工作

我认为你也可能会对自己命名变量的方式感到困惑。 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>";}

这对我(无论如何)更清楚。