0

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

1 回答 1

0

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

通过将第 2 行的检查更改为,我能够使您的 XML + 代码正常工作$exists = $rooms_tag->item(0)->nodeValue != '';

我认为您可能也对命名变量的方式感到困惑。 getElementsByTagName()返回一个NodeList对象,该对象(可能)包含多个DOMNode对象。NodeList如果您的 XML 中有一个 No_of_Rooms 元素,则 $rooms_tag 的长度将始终 > 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>";}

这(无论如何对我来说)要清楚得多。

于 2013-02-26T22:07:39.420 回答