PHP - SimpleXML parse error

前端 未结 4 983
小鲜肉
小鲜肉 2020-12-10 07:21

SEE EDITS AT BOTTOM TO SHOW MORE ACCURATE ERROR OUTPUT

I\'m parsing somewhat large (~15MB) XML files with PHP for the first time using SimpleXML. The files are flig

4条回答
  •  时光说笑
    2020-12-10 07:54

    As mentionned in other answers and comments, your source XML is broken and XML parsers are supposed to reject invalid input. libxml has a "recover" mode which would let you load this broken XML, but you would lose the "&sid" part so it wouldn't help.

    If you're lucky and you like taking chances, you can try to somehow make it work by kind-of-fixing the input. You can use some string replacement to escape the ampersands that look like they're in the query part of an URL.

    $xml = file_get_contents('broken.xml');
    // replace '&' followed by a bunch of letters, numbers
    // and underscores and an equal sign with &
    $xml = preg_replace('#&(?=[a-z_0-9]+=)#', '&', $xml);
    $sxe = simplexml_load_string($xml);
    

    This is, of course, nothing but a hack and the only good way to fix your situation is to ask your XML provider to fix their generator. Because if it generates broken XML, who knows what other errors slip by unnoticed?

提交回复
热议问题