我有以下代码,它拿走了我所有的XML字段中的"money",但只有一条记录,并显示了这个错误:
错误:
Warning: SimpleXMLElement::__construct(): Entity: line 1: parser error : Start tag expected, '<' not found in /var/www/client/lib/class/index.php on line 34
Warning: SimpleXMLElement::__construct(): %PDF-1.4 in /var/www/client/lib/class/index.php on line 34
Warning: SimpleXMLElement::__construct(): ^ in /var/www/client/lib/class/index.php on line 34
Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /var/www/client/lib/class/index.php:34 Stack trace: #0 /var/www/client/lib/class/index.php(34): SimpleXMLElement->__construct('%PDF-1.4?%?????...') #1 /var/www/client/lib/class/index.php(47): uuid->select() #2 {main} thrown in /var/www/client/lib/class/index.php on line 34
我的代码:
$data = $this -> conect -> conexion();
$dbquery = $data -> prepare("SELECT *
FROM FILE
ORDER BY ID
");
$dbquery->execute();
while($rows = $dbquery->fetch(PDO::FETCH_ASSOC)){
$string = $rows['BYTES'];
$tuxml = new SimpleXMLElement($string);
echo $tuxml->attributes()->Moneda;
分析
正确读取异常信息可以揭示问题的根源:
Entity: line 1: parser error : Start tag expected, '<' not found
结论:您试图解析不是有效XML 的内容
SimpleXMLElement->__construct('%PDF-1.4?%?????...')
结论:看起来您正试图解析一个由幻数"%"表示的PDF文件PDF":
幻数:
使用PDF时,所有PDF文件都以字符"%PDF-"开头
版本号,例如"%PDF-1.4"。这些字符为美国字符-
ASCII编码(来源:RFC 3778,第9页,https://www.rfc-editor.org/rfc/rfc3778)
决议
- 确保源仅包含有效的XML文件
- 尝试检测文件的mime类型并跳过非XML文件
- 添加一个环绕的try-catch块来处理无法解析为XML的文件