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()返します。XML に単一の No_of_Rooms 要素がある場合、$rooms_tag の長さは常に > 0 になります。これらをすべて書き直すと、次のようになります。NodeListDOMNodeNodeList

$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 に答える