2014-02-26 302 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