SimpleXML رمي التحذيرات - كيف للقبض؟

أواجه بعض الصعوبات في تحديد ما يجري باستخدام simplexml_load_string() أنا أستخدم الكود التالي لتقديم بعض xml ... عندما أقوم بتشغيل هذا الكود أتلقى رسائل خطأ مثل:

Message: simplexml_load_string() [function.simplexml-load-string]: Entity: line 94: parser error : Opening and ending tag mismatch: meta line 15 and head

أي أفكار حول كيف يمكنني التقاط هذه التحذيرات؟ libxml_get_errors ليس له أي تأثير.

                $response = simplexml_load_string($response);
                var_dump($response);
                if (count(libxml_get_errors()) > 0) {
                    print_r(libxml_get_errors());
                }

                if (is_object($response)) { //returns true when warnings are thrown
                    //process response
                } else {
                    //record error
                }
0
أنت بصدد تحميل ملف .xml غير صالح. ربما مندوب المشكلة إلى الرجل الذي يتم توفيرها؟
وأضاف المؤلف FailedDev, مصدر

2 إجابة

libxml_use_internal_errors(true);//!!!

$elem = simplexml_load_string($xml);
if($elem !== false)
{
   //Process xml structure here
}
else
{
    foreach(libxml_get_errors() as $error)
    {
        error_log('Error parsing xml file ' . $file . ': ' . $error->message);
    }
}
11
وأضاف
التعامل مع الخطأ هو أسوأ من ذلك. يعطي التحذير مزيدًا من الرسائل المحددة حول جزء مصدر xml غير صحيح مما يمكن أن تقدمه معالجة الأخطاء. يعرض الأخير فقط عمودًا ، خطًا يصعب تحديد موقع جزء الخطأ فيه إذا لم يتم تشفير ملف مصدر xml بتنسيق جيد.
وأضاف المؤلف Scott Chu, مصدر
هذه الإجابة لا تمنع التحذيرات ، بل تعرض فقط مزيدًا من المعلومات حول الأخطاء. لمنع التحذيرات ، استخدم set_error_handler() كما في هذه الإجابة: stackoverflow.com/a/17012247/204842
وأضاف المؤلف Russell G, مصدر

في خادم الوضع بلدي الذي كان تقاسم xml غيرت http إلى https. وبسبب ذلك ، تم تنزيل ملف xml للمسار القديم ، والذي كان في هذه الحالة "تالفًا". لهذا السبب حصلنا على الخطأ.

تم تحميل ملفات xml بشكل مثالي بسبب ذلك لم ألاحظ مشكلة في https (إعادة توجيه المتصفح).

0
وأضاف