从php读取XML文件

时间:2014-02-26 09:10:17

标签: php xml

我在阅读此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>

我有一个<MESSAGES>标记,其中包含多个包含不同值的<MESSAGE>标记。我目前正在使用此代码读取每个<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>代码?

1 个答案:

答案 0 :(得分:3)

问题是simplexml对象正在返回第一条记录(0)。因此,在您的代码中,您需要循环使用Messages-&gt;消息标记来覆盖它们。 您可以使用此代码来获取所有消息:

$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 />';
    }
    }
}