打印XML数组时出现问题


Problems printing array of XML

我有以下代码,它拿走了我所有的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的文件