2014-02-26 278 views
0

閱讀此XML數據時遇到問題。從php讀取XML文件

<?xml version="1.0"?> 
<DOCUMENT> 
    <VERSION>2.0</VERSION> 
    <MESSAGES> 
     <MESSAGE> 
      <SEND_DATE>2014-02-26</SEND_DATE> 
      <ENTITY_ID>7002</ENTITY_ID> 
      <RECIPIENT_NUM>xxxxxxxxxxxxxx</RECIPIENT_NUM> 
      <MESSAGE_PARAMS> 
       <DEN_SURNAME>Roze</DEN_SURNAME> 
       <APPT_DATE>27/02/14</APPT_DATE> 
       <APPT_TIME>09:00</APPT_TIME> 
      </MESSAGE_PARAMS> 
     </MESSAGE> 
     <MESSAGE> 
      <SEND_DATE>2014-02-26</SEND_DATE> 
      <ENTITY_ID>7002</ENTITY_ID> 
      <RECIPIENT_NUM>xxxxxxxxxxxx</RECIPIENT_NUM> 
      <MESSAGE_PARAMS> 
       <DEN_SURNAME>Roze</DEN_SURNAME> 
       <APPT_DATE>27/02/14</APPT_DATE> 
       <APPT_TIME>09:00</APPT_TIME> 
      </MESSAGE_PARAMS> 
     </MESSAGE> 
     <MESSAGE> 
      <SEND_DATE>2014-02-26</SEND_DATE> 
      <ENTITY_ID>7002</ENTITY_ID> 
      <RECIPIENT_NUM>xxxxxxxxxxxxxx</RECIPIENT_NUM> 
      <MESSAGE_PARAMS> 
       <DEN_SURNAME>Roze</DEN_SURNAME> 
       <APPT_DATE>27/02/14</APPT_DATE> 
       <APPT_TIME>09:00</APPT_TIME> 
      </MESSAGE_PARAMS> 
     </MESSAGE> 
    </MESSAGES> 
</DOCUMENT> 

我有一個包含含有不同值幾個<MESSAGE>標籤一個<MESSAGES>標籤。我目前使用此代碼來讀取每個<MESSAGE>標記中的值。

$dr_name=$xml->MESSAGES->MESSAGE->MESSAGE_PARAMS->DEN_SURNAME; 
$apt_date= $xml->MESSAGES->MESSAGE->MESSAGE_PARAMS->APPT_DATE; 
$apt_time= $xml->MESSAGES->MESSAGE->MESSAGE_PARAMS->APPT_TIME; 

我只得到第一個<MESSAGE>標記的值。

如何讀取所有<MESSAGE>標籤?

回答

3

問題是simplexml對象返回第一條記錄(0)。因此,在你的代碼中,你需要循環Messages->消息標籤來達到它們。 您可以使用此代碼來獲取所有的消息:

$file = 'data.xml'; 
$oXml = simplexml_load_file($file); 
if($oXml){ 
    if(count($oXml->MESSAGES->MESSAGE) > 0){ 
     foreach($oXml->MESSAGES->MESSAGE as $m){ 
     echo 'Sent: '.$m->SEND_DATE.'<br />'; 
    echo 'ID: '.$m->ENTITY_ID.'<br />'; 
    echo 'ID: '.$m->RECIPIENT_NUM.'<br />'; 
    echo 'Surname: '.$m->MESSAGE_PARAMS->DEN_SURNAME.'<br /><hr /><br />'; 
    } 
    } 
} 
+0

謝謝你這麼多 – arok

+0

也請解釋爲什麼你的答案的作品,哪些問題是 – andyb

+0

@andyb問題是simplexml的對象是返回的第一個記錄(0) 。因此,在你的代碼中,你需要循環Messages->消息標籤來達到它們。 – artuc