具有nusoap响应的SimpleXML

时间:2015-07-03 16:15:20

标签: php xml simplexml nusoap simplexml-load-string

我正在尝试从Web服务结果中解析XML,但我失败了。结果似乎是有效的,因为我打印它,它显示我需要的所有数据。

print_r($result);

给我:

<?xml version="1.0" encoding="utf-8"?><retorno> <versao>1.00</versao> <versaodados>1.00</versaodados> <codigoconvenio>S2111601391F5530F0250A</codigoconvenio> <codigoretorno>0</codigoretorno> <mensagens> <mensagem>Sucesso</mensagem> </mensagens> <dados> <dado><identificadorfatura>1000219113262</identificadorfatura><mesanoreferencia>ABR/2015</mesanoreferencia><datavencimento>2015-06-07</datavencimento><valorfatura>239.72</valorfatura></dado> </dados></retorno>

现在,我需要获取“codigoretorno”标签内容,我正在尝试考虑“retorno”将是根标签:

$xml = simplexml_load_string($result);
if ($xml === false) {
    echo "Failed loading XML: ";
    foreach(libxml_get_errors() as $error) {
        echo "<br>", $error->message;
    }
} else {
    echo 'Codigo Convenio: ';
    echo $xml->codigoconvenio;
}

给我没有错误,只打印“Codigo Convenio:”,没有任何跟随。当我尝试:

print_r($xml);

我明白了:

SimpleXMLElement Object ( ) 

还有:

var_dump($xml);

输出结果为:

object(SimpleXMLElement)#5 (0) { } 

欢迎任何建议!

1 个答案:

答案 0 :(得分:1)

你实际上的PHP代码并不是骗你的,也不是你写下来的。您可能对某些细节发表评论很有用:

$xml = simplexml_load_string($result);
if ($xml === false) {
    ...

正如您所观察到的,false案例未被触发,因此加载XML成功。

然后报告空白的print_r SimpleXMLElement输出。现在这有点不公平。您可能从观察中了解到print_rvar_dump在开发和调试代码时非常有用。在SimpleXMLElement 的情况下, 尤其不是。在 general 中,情况并非如此,因为带有断点的步进调试器远远优于放置 var_dump print_r 暂时在你的代码中。

无论如何,对于 SimpleXMLElement ,它特别没用。将您使用的XML文件与一个小数据库进行比较。例如,当您创建PDO对象以与数据库交互并在其上使用 print_r var_dump 时,您是否希望看到< em>数据库的全部内容?我打赌你不会。这与simplexml类似。使用print_r不会向您显示XML。它有时会显示类似于XML结构的东西,但只显示某些规则下的元素,这些元素可能非常具体。顺便说一句,这一直是一个令人讨厌的问题,这个Q&amp; A的经典之作是:

相反,请查看XML本身,然后查询您要查找的数据。就像你做的那样。它甚至可以工作:https://eval.in/392059