2011-08-28 13 views
5

पास होने पर घातक अपवादों को फेंकता है मेरे पास एक XML स्ट्रिंग को लोड करने के लिए एक त्वरित फ़ंक्शन है, और इसे स्कीमा के विरुद्ध सत्यापित करें। जब यह अच्छी तरह से बनाया गया एक्सएमएल, यह पूरी तरह से व्यवहार करता है।PHP एक्सएमएल प्रमाणीकरण खराब एक्सएमएल

हालांकि जब मैं एक्सएमएल सिंटैक्स को स्वयं बना देता हूं, तो php एक घातक त्रुटि फेंकता है और स्क्रिप्ट को मारता है। मैं loadXML फ़ंक्शन रिटर्न मान की जांच कर रहा हूं, और मुझे एक साधारण सत्य/झूठा चाहिए। अगर एक्सएमएल गंदा है, loadXML() असफल हो जाएगा और मैं बस सत्यापन विफलता वापस कर सकता हूं। मैंने एक खाली त्रुटि हैंडलर सेट करने का प्रयास किया है, लेकिन यह अभी भी स्क्रिप्ट को मारता है।

कोई विचार? क्या मुझे त्रुटियों या कुछ डाउनग्रेड करने की आवश्यकता है?

संदर्भ के लिए शामिल कोड (PHP):

function __maskerrors(){}; 

function ValidateImageXML($xml_string) 
{ 
    /* Parse XML data string into DOM object */ 
    $xdoc = new DomDocument; 

    /* Calculate schema location */ 
    $schema = dirname(realpath(__FILE__)); 
    $schema.= "/image-xml-schema.xsd"; 

    /* Mask any errors */ 
    set_error_handler('__maskerrors'); 

    /* Parse xml string, check for success */ 
    if($xdoc->loadXML($xml_string)) 
    { 
     /* Validate xml against schema */ 
     if($xdoc->schemaValidate($schema)) 
     { 
      /* Valid XML structure & valid against schema, return true */ 
      return true; 
     } 
     else 
     { 
      /* Valid XML structure, but invalid against schema. Return false */ 
      return false; 
     } 
    } 
    else 
    { 
     /* Invalid XML structure, return false */ 
     return false; 
    } 

    /* Stop masking errors */ 
    restore_error_handler(); 
} 
+0

घातक त्रुटि का संदेश क्या है? – hakre

उत्तर

4

libxml_use_internal_errors(true); 
$xdoc->loadXml($yourXml); 
libxml_clear_errors(); 
return $xdoc->schemaValidate($schema) 

साथ प्रयास करें यह libxml त्रुटियों को अक्षम और आवश्यकतानुसार उपयोगकर्ता त्रुटि जानकारी लाने के लिए अनुमति देगा (या उन्हें स्पष्ट)

देखें http://.php.net/manual/en/book.libxml.php

+0

सही काम करता है, धन्यवाद – Oliver