Dưới đây là một mảnh nhỏ của lớp tôi đã viết một thời gian trước:
/**
* Class XmlParser
* @author Francesco Casula <[email protected]>
*/
class XmlParser
{
/**
* @param string $xmlFilename Path to the XML file
* @param string $version 1.0
* @param string $encoding utf-8
* @return bool
*/
public function isXMLFileValid($xmlFilename, $version = '1.0', $encoding = 'utf-8')
{
$xmlContent = file_get_contents($xmlFilename);
return $this->isXMLContentValid($xmlContent, $version, $encoding);
}
/**
* @param string $xmlContent A well-formed XML string
* @param string $version 1.0
* @param string $encoding utf-8
* @return bool
*/
public function isXMLContentValid($xmlContent, $version = '1.0', $encoding = 'utf-8')
{
if (trim($xmlContent) == '') {
return false;
}
libxml_use_internal_errors(true);
$doc = new DOMDocument($version, $encoding);
$doc->loadXML($xmlContent);
$errors = libxml_get_errors();
libxml_clear_errors();
return empty($errors);
}
}
Nó hoạt động tốt với các dòng và vfsStream như chúng tôi sẽ cho mục đích thử nghiệm.
Nguồn
2015-05-05 16:39:40
Đóng để hoàn thiện ... chỉ muốn nói thêm rằng chức năng display_xml_error chỉ đơn giản là một chức năng tùy chỉnh để xuất sai sót trong một cách tốt đẹp , nó có thể được tìm thấy ở đây http://php.net/manual/en/function.libxml-get-errors.php. Lúc đầu, tôi nghĩ rằng đó là một chức năng nội bộ mà tôi đã mất tích. – Carlton
Hãy cẩn thận với 'if (! $ Doc)'! PHP xem xét ví dụ một tài liệu không gian tên là trống và do đó '! $ Doc === TRUE'. – David
Tôi chạy vào vấn đề như @ David đề cập đến, tôi đã phải kiểm tra rõ ràng cho 'if ($ doc! == FALSE)' thay vì chỉ 'if ($ doc)' mà bình thường là đủ. – Samsquanch