|
|
1
5
看一看 PHP's DOM 尤其是 DOMDocument::schemaValidate 和 DOMDocument::validate . DOMDocument::validate的示例相当简单:
|
|
|
2
3
如果字符串中有dtd,则可以使用 data wrapper 对于dtd:
|
|
|
3
3
我对原始问题的解释是,我们有一个“机载”XML文件,我们想根据“机载”DTD文件对其进行验证。以下是我将如何实现Soren和PayamRWD在评论中表达的“在DOCTYPE元素内插入本地DTD”的想法:
public function validate($xml_realpath, $dtd_realpath=null) {
$xml_lines = file($xml_realpath);
$doc = new DOMDocument;
if ($dtd_realpath) {
// Inject DTD inside DOCTYPE line:
$dtd_lines = file($dtd_realpath);
$new_lines = array();
foreach ($xml_lines as $x) {
// Assume DOCTYPE SYSTEM "blah blah" format:
if (preg_match('/DOCTYPE/', $x)) {
$y = preg_replace('/SYSTEM "(.*)"/', " [\n" . implode("\n", $dtd_lines) . "\n]", $x);
$new_lines[] = $y;
} else {
$new_lines[] = $x;
}
}
$doc->loadXML(implode("\n", $new_lines));
} else {
$doc->loadXML(implode("\n", $xml_lines));
}
// Enable user error handling
libxml_use_internal_errors(true);
if (@$doc->validate()) {
echo "Valid!\n";
} else {
echo "Not valid:\n";
$errors = libxml_get_errors();
foreach ($errors as $error) {
print_r($error, true);
}
}
}
请注意,为了简洁起见,错误处理已被抑制,可能有更好/更通用的方法来处理插值。但我 有 实际上将此代码与真实数据一起使用,它适用于PHP 5.2.17版本。 |
|
4
0
试图完成“owenmashall”的答案:在xml-validator.php中: 添加html、页眉、正文。..
template-format.xml:
|