2010-11-09 17 views
6

Bazı XML (adf) öğelerini ayrıştıran bir komut dosyası var. Bazen kırık XML verilerini alırız (örneğin sözdizimi, bitiş etiketi, vb.).PHP SimpleXMLElement ayrıştırma hatası yakalanıyor

SimpleXMLElement hata veriyor ve betiğimi öldürüyor, $xml_body = new SimpleXMLElement ($adf_xml); gibi bir şeyi nasıl atayabilir ve ayrıştırma özel durumunu nasıl yakalayabiliriz?
0/ev: mesajla


yakalanmamış istisna 'İstisna' /home//Work//script/email_leads.php:46 içinde
Yığın izlemesi 'dize XML olarak ayrıştırılamadı' //Work//script/email_leads.php(46): SimpleXMLElement -> __ yapı ('<? Xml sürümü = "...')
1 /home//Work//script/email_leads.php(97): generateFeed()
2 {ana}

+0

Uhm, burada SimpleXML kullanmanın istediğiniz şey olduğundan emin misiniz? İyi oluşturulmamış veriler beklerseniz kesinlikle draconian xml kullanmamalısınız, ancak bunun yerine bazı DOM ayrıştırıcılarını kullanmalısınız. – NikiC

+0

Bu, bir INBOX (imap) ... –

+0

olası yinelemesinin [php: catch özel durumunu ve yürütme işleminin devam etmesini mümkün kılan bir chronun komut dosyasıdır.] (Http://stackoverflow.com/questions/2132759/php-catch-exception-ve-devam-yürütme-is-it-mümkün) – hakre

cevap

4
libxml_use_internal_errors(true); 
+0

libxml_use_internal_errors hata günlükleri temizler, komut dosyası Parse hatası attığında hala ölecek ... Yardım için teşekkürler/bahşiş ver :) –

+0

Bir keresinde en çok oylanan cevap için oy verdim, ancak bence burada bahsedilen işlevle hatanın üstesinden gelmek daha doğru olur. Ve neler olduğunu öğrenmek için libxml_get_errors veya libxml_get_last_error kullanıyorsunuz. – cwhsu

11

Tamam, görünüşe göre XML hata ayrıştırma alıcı biraz Kutsal Kase'nin ... Sadece

try { $x = new SimpleXMLElement($y); } catch (Exception $e) { echo $e; } 
+4

try/catch SimpleXMLElement ile çalışmıyor gibi görünüyor. Ya da en azından benim için bir xml dosyası yüklemedi. – Jake

+3

Bunun benim için de çalışmadığını gördüm. Kullanmam gerekti: $ x = new \ SimpleXMLElement ($ xmlString, LIBXML_NOERROR); Bu bana bir catchable İstisnası veriyor gibi görünüyor. Referans için [LIBXML_NOERROR] için PHP kılavuzuna bakın (http://php.net/manual/en/libxml.constants.php) – PanPipes

0

xml_parse XML başarıyla ayrıştırıldı olup olmadığını gösteren bir Boole değeri döndürür sona erdi olduğunu. Bu nedenle, bunun çalışması gerekir:

$fp = fopen($xml_file, "r"); 
$xml_data = fread($fp, 80000); 

if(!(xml_parse($xml_parser, $xml_data, feof($fp)))){ 
    # do something 
} 
İlgili konular