2009-08-28 31 views
6

tôi có mã này để xác nhận một tập tin XML chống lại một tập tin XSD:Làm cách nào để nhận được thông báo cảnh báo dưới dạng chuỗi khi xác nhận hợp lệ XML với schemaValidate() trong PHP?

$file = 'test.xml'; 
$schema = 'test.xsd'; 
$dom = new DOMDocument; 
$dom->load($file); 


if ($dom->schemaValidate($schema)) { 
    print "$file is valid.\n"; 
} else { 
    print "$file is invalid.\n"; 
} 

Nếu file xml là không hợp lệ, sau đó nó nói rằng nó không hợp lệ. Lý do không hợp lệ (ví dụ: giá không phải là số nguyên), tuy nhiên, chỉ được đưa ra trong cảnh báo PHP, mà tôi phải chặn để người dùng không nhìn thấy (với error_reporting (0)).

Làm cách nào tôi có thể nhận được văn bản của tin nhắn đó và chuyển nó cho người dùng, như tôi sẽ làm trong C# bằng try/catch?

Trả lời

14

Tôi nghĩ rằng bạn có thể sử dụng chức năng xử lý lỗi libxml 's cho một này:

đơn giản ví dụ:

$file = 'test.xml'; 
$schema = 'test.xsd'; 
$dom = new DOMDocument; 
$dom->load($file); 

libxml_use_internal_errors(true);  
if ($dom->schemaValidate($schema)) { 
    print "$file is valid.\n"; 
} else { 
    print "$file is invalid.\n"; 
    $errors = libxml_get_errors(); 
    foreach ($errors as $error) { 
     printf('XML error "%s" [%d] (Code %d) in %s on line %d column %d' . "\n", 
      $error->message, $error->level, $error->code, $error->file, 
      $error->line, $error->column); 
    } 
    libxml_clear_errors(); 
} 
libxml_use_internal_errors(false); 
0

Nếu bạn chỉ cần in, bạn có thể xác định tùy chỉnh error handler để in lỗi.

0

đây là cách tôi đã làm nó:

$errs = [ ]; 
set_error_handler (function ($severity, $message, $file, $line) use (&$errs) { 
    $errs [] = $message; 
}); 
$validated = $domd->schemaValidate ('factinv-3-0.xsd'); 
restore_error_handler(); 

mô tả lỗi hiện đang ở $ errs, nếu có.

Các vấn đề liên quan