忽略XML之外的无效字符?

时间:2013-02-25 07:54:19

标签: php xml simplexml

我已经从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是正确的,只是在响应上有问题,有没有办法解决这条额外的行?

2 个答案:

答案 0 :(得分: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

希望有所帮助。

答案 1 :(得分:0)

如果您知道结构将始终如此,则循环每一行,从左侧剥离空白,如果第一个字符与“&lt;”不同然后删除该行。最后将结果提供给SimpleXML。