为什么SimpleXMLElement返回一个空对象?

时间:2011-07-11 14:11:14

标签: php xml simplexml

我使用SimpleXMLElement方法加载字符串,但它不起作用。我的代码是:

$xml = new SimpleXMLElement($content);
var_dump($xml);

var_dump返回

object(SimpleXMLElement)#104 (0) { }

var $ content已经过修正设置和填充,如果我回显这个var,结果就是这样:

<?xml version="1.0" encoding="utf-8" ?> 
<string xmlns="http://www.jadlog.com.br/JadlogWebService/services"> 
    <Jadlog_Tracking_Consultar> 
        <ND> 
            <Numero>10080780714284</Numero> 
            <Status>ENTREGUE</Status> 
            <DataHoraEntrega>16/06/2011</DataHoraEntrega> 
            <Recebedor>DIEGO OLIVEIRA CRUZ</Recebedor> 
            <Documento>0883473380</Documento> 
            <Evento> 
                <Codigo></Codigo> 
                <DataHoraEvento>10/06/2011 19:51</DataHoraEvento> 
                <Descricao>EMISSAO </Descricao> 
                <Observacao>CO SAO PAULO 08</Observacao> 
            </Evento> 
            <Evento> 
                <Codigo></Codigo> 
                <DataHoraEvento>10/06/2011 20:12</DataHoraEvento> 
                <Descricao>TRANSFERENCIA </Descricao> 
                <Observacao>TECA JAD SAO</Observacao> 
            </Evento> 
            <Evento> 
                <Codigo></Codigo> 
                <DataHoraEvento>10/06/2011 20:53</DataHoraEvento> 
                <Descricao>ENTRADA </Descricao> 
                <Observacao>TECA JAD SAO</Observacao> 
            </Evento> 
            <Evento> 
                <Codigo></Codigo> 
                <DataHoraEvento>10/06/2011 21:05</DataHoraEvento> 
                <Descricao>TRANSFERENCIA </Descricao> 
                <Observacao>FL JAD SALVADOR</Observacao> 
            </Evento> 
            <Evento> 
                <Codigo></Codigo> 
                <DataHoraEvento>12/06/2011 10:27</DataHoraEvento> 
                <Descricao>ENTRADA </Descricao> 
                <Observacao>FL JAD SALVADOR</Observacao> 
            </Evento> 
            <Evento> 
                <Codigo></Codigo> 
                <DataHoraEvento>12/06/2011 11:21</DataHoraEvento> 
                <Descricao>TRANSFERENCIA </Descricao> 
                <Observacao>CO SALVADOR 02</Observacao> 
            </Evento> 
            <Evento> 
                <Codigo></Codigo> 
                <DataHoraEvento>12/06/2011 11:25</DataHoraEvento> 
                <Descricao> ATRASO TRANSPORTE</Descricao> 
                <Observacao>FL JAD SALVADOR</Observacao> 
            </Evento> 
            <Evento> 
                <Codigo></Codigo> 
                <DataHoraEvento>12/06/2011 11:51</DataHoraEvento> 
                <Descricao>TRANSFERENCIA </Descricao> 
                <Observacao>CO SALVADOR 02</Observacao> 
            </Evento> 
            <Evento> 
                <Codigo></Codigo> 
                <DataHoraEvento>14/06/2011 14:28</DataHoraEvento> 
                <Descricao>ENTRADA </Descricao> 
                <Observacao>CO SALVADOR 02</Observacao> 
            </Evento> 
            <Evento> 
                <Codigo></Codigo> 
                <DataHoraEvento>14/06/2011 16:14</DataHoraEvento> 
                <Descricao>ENTRADA </Descricao> 
                <Observacao>CO SALVADOR 02</Observacao> 
            </Evento> 
            <Evento> 
                <Codigo></Codigo> 
                <DataHoraEvento>14/06/2011 18:10</DataHoraEvento> 
                <Descricao>EM ROTA </Descricao> 
                <Observacao>CO SALVADOR 02</Observacao> 
            </Evento> 
            <Evento> 
                <Codigo></Codigo> 
                <DataHoraEvento>16/06/2011 08:59</DataHoraEvento> 
                <Descricao>ENTREGUE </Descricao> 
                <Observacao>CO SALVADOR 02</Observacao> 
            </Evento> 
        </ND> 
    </Jadlog_Tracking_Consultar> 
</string>

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

问题在于webservice,它正在返回一个Soap对象,但我能够在源代码中看到它。由于XML显示正常,我不认为请求存在问题。检查源代码并使用Soap处理请求后,我可以搞清楚。 SimpleXML很好用。

感谢大家的帮助。

答案 1 :(得分:1)

它可能不是“空” - 例如尝试$xml->children();。据我所知,SimpleXmlElement的行为与其他PHP对象不同,当你var_dump它时(虽然我认为它因某种原因与print_r一起使用)但它并没有向你展示它的成员。

答案 2 :(得分:0)

它运作正常。 XML刚刚存储在一个对象中。所以你可以像任何其他对象一样访问它。所以当你转储$ xml的内容时,你看到它说对象是正确的。见下面的例子。以下是一些随机的例子。我只是想向你展示箭头 - &gt;。

<?php    
$xml = new SimpleXMLElement($xmlstr);

echo $xml->movie[0]->plot;
?>