-1

我从 curl 请求中收到了这个 XML。

<?xml version="1.0" encoding="utf-8"?>
<transaction>
    <result>PENDING</result>
    <merchanttransid>343434343</merchanttransid>
    <transref>23232323</transref>
    <errorcode>000</errorcode>
    <errormessage/>
    <description/>
</transaction>
SMTP Error: Could not connect to SMTP host.

但是,服务器正在回复 SMTP 错误的附加错误响应:无法连接到 SMTP 主机。现在,当通过 simplexml_load_string() 解析时。

它抛出一个错误:

实体:第 10 行:解析器错误:文档末尾的额外内容(错误编号:2)

因为,XML 是正确的,只是在响应上有问题,有没有办法去除多余的行?

4

2 回答 2

0

如果你知道结构总是这样,循环每一行,从左边去掉空格,如果第一个字符不同于“<”,则删除该行。最后将结果提供给 SimpleXML。

于 2013-02-25T08:11:55.390 回答
0

您可以尝试调用传递参数的函数来忽略读取 XML 的错误消息:

$xml = simplexml_load_file($url, "SimpleXMLElement", LIBXML_NOERROR |  LIBXML_ERR_NONE);

您可以查看完整列表,其中包含可以传递给此函数的选项:http ://www.php.net/manual/en/libxml.constants.php

另一种解决方案(如果要解析大文件则不好)是逐行读取字符,然后删除最后一行。

$xml = '<?xml...?>';
$lines = explode("\n", $xml);
unset( $lines[count($lines)-1] ); // remove last line
$output = implode($lines); // output now contains xml without the last line

希望有帮助。

于 2013-02-25T08:10:57.377 回答